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

MSSQL查询每个用户最新数据记录的技术问题

解决方案

方法一:使用窗口函数ROW_NUMBER()

这是精准筛选单条最新记录的常用方案,即使同一用户有相同最新时间的多条记录,也能通过额外规则确定唯一结果。

WITH RankedRecords AS (
    SELECT 
        id,
        [user],
        status,
        insertDate,
        -- 按用户分组,组内按插入时间倒序排序,最新记录行号为1
        ROW_NUMBER() OVER (PARTITION BY [user] ORDER BY insertDate DESC, id DESC) AS rn
    FROM 你的表名
)
SELECT id, [user], status, insertDate
FROM RankedRecords
WHERE rn = 1;
  • 细节说明:PARTITION BY [user] 实现按用户分组;ORDER BY insertDate DESC, id DESC 保证同一用户下,最新时间的记录优先,若时间相同,取id更大(更晚插入)的记录;最终筛选行号为1的条目,就是每个用户的最新记录。

方法二:子查询关联获取最新记录

如果允许返回同一用户在同一最新时间点的所有记录,可采用这种方式:

SELECT t.id, t.[user], t.status, t.insertDate
FROM 你的表名 t
INNER JOIN (
    -- 先统计每个用户的最新插入时间
    SELECT [user], MAX(insertDate) AS latestDate
    FROM 你的表名
    GROUP BY [user]
) t2 ON t.[user] = t2.[user] AND t.insertDate = t2.latestDate;
  • 细节说明:子查询先拿到每个用户的最大插入时间,再通过关联原表,筛选出对应用户且时间匹配的所有记录。

关键注意点

  • user是MSSQL的保留关键字,必须用方括号[user]包裹,否则会触发语法错误。
  • 若你之前的SQL仅用GROUP BY [user]却未正确聚合其他字段,会导致返回所有条目,上述两种方法可以解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:15:35