2016-03-28 19 views
1

öğe sayısını bulmak katılmak Ben Aşağıdaki tablolardaaynı revizyon numarasına

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 

Belirli bir asset_ID için maksimum rev için swablocations toplam sayısını olsun ister etmedi. Örneğin, asset_id 123 rev 0 için swab konumunun toplam sayısı 2'dir, ancak rev 1 için 3'tür. Son birkaç saati anlamaya çalışıyorum ama bir çözüm bulamıyorum. Katıldığım için oldukça kötüyüm. Aşağıdaki i

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

kullandığım

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) 

aşağıdaki Ben benim sorguya #swablocation ekleyebilir nasıl emin değilim, almaya çalışıyorum ne olduğunu gösterir.

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); 

avantajı dış sorgu toplanmasına gerek olmamasıdır:

+0

#swablocation öğesini nasıl tanımlıyorsunuz? Bu bir sayı mı, kimlik numarası mı? – DanK

+0

Bu bir sayım olurdu, ben daha net hale getirmek için benim gönderiimi düzenleyecektir – SunRay

cevap

1

tarafından bir sayım ve bir grup gerekir.

+0

içinde sütunlar başvurulan olabilir, ancak bunu tüm rev # tüm swab konumları toplam sayısını verir, sadece swab gerekir maxrev ait konumlar ı ben kod bir satır daha ekleyerek işe gitmek için yönetmek 123 – SunRay

+0

varlık kimliği için 5 sürüntü yerleri var 'beni seçin. *, (select count (*) tblmainswablocation gelen sl olarak sl.asset_id = me.asset_id VE sl.rev = me.rev ) tblMainEquipment'dan gelen numSwabs olarak burada me.rev = (max (me2.rev) öğesini tblMainEquipment içinden me2 olarak seçin me2.asset_id = me.asset_id)' – SunRay

1

Sen Burada ilişkili alt sorgular kullanan bir yöntemdir

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

bu sorgu tblmainswablocations – SunRay

+0

dahil değildir neden anlamıyorum (tblmainswablocation.swab_location) neden tabloya bir referans olmadan anladım bir parçası ilk FROM – SunRay

+0

Birleştirme içinde tüm sütunlar sadece "from" tablo – scaisEdge

İlgili konular