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表中的列