2016-03-28 8 views
1

Ich habe die folgenden Tabelleninnere Verknüpfung in der gleichen Revisionsnummer

tblMainequipment 
asset_id rev equipment_name 
123  0  box 
123  1  box 
124  0  box 
125  0  bottle 

tblmainswablocation 
asset_id rev swab_location 
123  0  cover 
123  0  base 
123  1  cover 
123  1  base 
123  1  lock 
124  0  cover 
124  0  base 
125  0  tube 
125  0  cover 

I Anzahl der Elemente zu finden, nicht wie die Gesamtzahl der swablocations für die maximale Umdrehung für einen bestimmten ASSET_ID zu bekommen. Zum Beispiel ist die Gesamtzahl der Tupfer für Asset_id 123 rev 0 2, aber für rev 1 ist es 3. Ich habe versucht, in den letzten paar Stunden herauszufinden, aber ich kann nicht eine Lösung finden. Ich bin ziemlich schlecht mit Joins. Im Folgenden wird das, was ich zu bekommen versuchen,

query 
asset_id maxrev #swablocation equipment_name 
123  1   3    box 
124  0   2    cover 
125  0   2    bottle 

Ich verwende die folgenden SQL-

SELECT MEQ.* 
FROM tblMainEquipment AS MEQ 
INNER JOIN (Select asset_id, max(rev) as maxrev  
      From tblmainequipment GROUP By asset_id) AS groupmeq ON 
      (MEQ.asset_id = groupmeq.asset_id) AND (MEQ.rev = groupmeq.maxrev) 

Ich bin nicht sicher, wie ich das #swablocation in meine Anfrage hinzufügen.

+0

Wie definieren Sie #wablocation? Ist das eine Zählung, eine ID-Nummer? – DanK

+0

das wäre eine Zählung, ich werde meine Buchung bearbeiten, um es klarer zu machen – SunRay

Antwort

1

Hier ist eine Methode, die korrelierte Unterabfragen verwendet:

select me.*, 
     (select count(*) 
     from tblmainswablocation as sl 
     where sl.asset_id = me.asset_id 
     ) as numSwabs 
from tblMainEquipment as me 
where me.rev = (select max(me2.rev) from tblMainEquipment as me2 where me2.asset_id = me.asset_id); 

Der Vorteil ist, dass die äußere Abfrage nicht Aggregation erfordert.

+0

Ich habe dies versucht, aber es gibt die Gesamtzahl der Tupfer Standorte von allen rev # zurück, ich würde nur den Tupfer benötigen Orte aus der MaXReV ich erhielt 5 Tupfer Plätze für die Asset-ID 123 – SunRay

+0

ich verwalten, um es durch das Hinzufügen einer weiteren Zeile Code ‚wählen mich zu arbeiten. *, (select count (*) von tblmainswablocation als sl wo sl.asset_id = me.asset_id UND sl.rev = me.rev ) als numSwabs von tblMainEquipment als me wo me.rev = (wählen Sie max (me2.rev) aus tblMainEquipment als me2 wo me2.asset_id = me.asset_id) " – SunRay

1

Sie benötigen einen Zähler und eine Gruppe von

SELECT MEQ.asset_id maxrev, MEQ.maxrev, 
    count(blmainswablocations.swab_location), MEQ.equipment_name 
FROM tblMainEquipment AS MEQ 
INNER JOIN (Select asset_id, max(rev) as maxrev  
     From tblmainequipment GROUP By asset_id) AS groupmeq ON 
     (MEQ.asset_id = groupmeq.asset_id) AND (MEQ.rev = groupmeq.maxrev) 
Inner join blmainswablocations on MEQ.asset_id = blmainswablocations.asset_id 
Group by MEQ.asset_id maxrev 
+0

diese Abfrage enthält keine Tblmainswablocations – SunRay

+0

gibt es einen Teil, den ich verstehe, warum Sie zählen (tblmainswablocation.swab_location) ohne einen Verweis auf die Tabelle in die erste VON – SunRay

+0

In einem Join können alle Spalten referenziert werden nicht nur die Spalten in der "von" Tabelle – scaisEdge

Verwandte Themen