求助:如何用带EXISTS的SQL子查询获取各设备最新状态
获取设备最新状态的SQL查询修正方案
原查询问题分析
你的原查询中,EXISTS子查询的逻辑存在偏差:虽然分组计算了每个设备的最大RecordID,但WHERE TAB1.RecordID= TAB2.RecordID的条件会匹配所有存在的RecordID,而非仅每个设备的最大ID,因此会返回所有行导致重复。
方案一:关联子查询匹配最大ID
直接针对每个设备,筛选出其RecordID等于该设备最大ID的记录:
SELECT t.Machine, t.Status FROM DB.dbo.TAB t WHERE t.RecordID = ( SELECT MAX(RecordID) FROM DB.dbo.TAB WHERE Machine = t.Machine )
方案二:窗口函数(推荐)
使用ROW_NUMBER()窗口函数为每个设备的记录按RecordID倒序编号,取编号为1的最新记录:
SELECT Machine, Status FROM ( SELECT Machine, Status, ROW_NUMBER() OVER (PARTITION BY Machine ORDER BY RecordID DESC) AS rn FROM DB.dbo.TAB ) ranked WHERE rn = 1
如果同一设备可能存在多个相同的最大RecordID(根据你的描述应该不会,但可按需调整),可以用RANK()替代ROW_NUMBER(),这样会返回所有同最大ID的状态记录。
内容的提问来源于stack exchange,提问作者TomasM
相关产品推荐
相关产品推荐

