You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:30:00