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

SQL查询所有SensorID对应最新更新行的问题求助

解决方案

要获取每个SensorID对应最新时间戳的全量行数据,可使用窗口函数ROW_NUMBER()实现,该方法适配你当前使用的SQL Server以及绝大多数主流SQL数据库。
正确实现代码如下:

WITH SensorDataRanked AS (
    SELECT 
        [SensorId],
        [TimeStamp],
        [Description],
        [Type],
        [V1],
        [V2],
        [V3],
        [Latitude],
        [Longitude],
        -- 按SensorID分组,组内按时间戳倒序排序,最新的记录行号为1
        ROW_NUMBER() OVER (PARTITION BY [SensorId] ORDER BY [TimeStamp] DESC) AS rn
    FROM [IoTDB].[dbo].[IOT]
)
SELECT 
    [SensorId],
    [TimeStamp] AS MAX_Timestamp,
    [Description] AS MAX_Description,
    [Type] AS MAX_Type,
    [V1] AS MAX_V1,
    [V2] AS MAX_V2,
    [V3] AS MAX_V3,
    [Latitude] AS MAX_Lat,
    [Longitude] AS MAX_Long
FROM SensorDataRanked
WHERE rn = 1 -- 只取每个Sensor的最新一条记录
ORDER BY SensorId;

补充说明

  • 如果单个Sensor存在多条完全相同TimeStamp的最新记录,上述写法只会返回其中一条,你可以在ORDER BY后追加排序字段(比如自增主键ID)来明确取数规则,也可以将ROW_NUMBER替换为RANK来返回所有同时间戳的最新记录。
  • 如果你确认Description、Type字段确实不随更新变化,也可以保留原GROUP BY写法,通过关联子查询匹配最新时间对应的行数据,窗口函数写法逻辑更清晰不易出错。

内容的提问来源于stack exchange,提问作者MacDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:00:02