Sql 内部联接以查找同一修订号中的项目数

Sql 内部联接以查找同一修订号中的项目数,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我有下列表格 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 1

我有下列表格

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
我确实希望获得特定资产id最大版本的棉签总数。例如,资产id 123版本0的棉签位置总数为2,版本1为3。过去几个小时我一直在想办法,但似乎找不到解决办法。我对连接很差。下面显示了我想要得到的

query
asset_id   maxrev    #swablocation  equipment_name
123        1         3              box
124        0         2              cover
125        0         2              bottle
我使用以下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)

我不确定如何将swablocation添加到查询中。

您需要一个计数和分组依据

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

下面是一个使用相关子查询的方法:

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

优点是外部查询不需要聚合。

如何定义swablocation?这是一个计数,一个ID号吗?这将是一个计数,我将编辑我的帖子以使其更清晰我尝试过这个方法,但它返回所有版本的拭子位置总数,我只需要maxrev中的拭子位置我获得了资产ID 123的5个拭子位置我通过添加一行代码“选择我”,从tblmainswablocation中选择count*作为sl,其中sl.asset_id=me.asset_id,sl.rev=me.rev作为numSwabs作为tblMainEquipment作为me,其中me.rev=从tblMainEquipment中选择maxme2.rev作为me2,其中me2.asset_id=me.asset_id'此查询不包括tblmainswablocation有一部分我不知道了解为什么在联接的第一个from中没有对表的引用而拥有counttblmainswablocation.swab_位置所有列都可以引用,而不仅仅是from表中的列