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

SQL Server中按名称取last_modify_date最大值,避免使用GROUP BY

解决方案:使用窗口函数获取每个name的最新记录

要避免使用GROUP BY同时获取每个name对应的最新last_modify_date记录,窗口函数是最优方案,无需重复列出所有30列。

具体查询语句

SELECT name, [value] AS v, last_modify_date
FROM (
    SELECT 
        name, 
        [value], 
        last_modify_date,
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY last_modify_date DESC) AS rn
    FROM MyTable
) AS sub
WHERE rn = 1;

逻辑说明

  • PARTITION BY name:将数据按name分组,每组单独处理
  • ORDER BY last_modify_date DESC:在每个分组内,按last_modify_date倒序排列,最新的记录排在最前面
  • ROW_NUMBER():为每个分组内的记录分配行号,最新的记录行号为1
  • 外层查询筛选行号rn = 1的记录,即可得到每个name的最新数据

针对测试数据的执行结果

name     | v   | last_modify_date
-------------------------------
Example1 | 100 | 2024-01-03 12:00:00
Example2 | 100 | 2024-01-02 18:00:00
Example3 | 100 | 2024-01-02 12:00:00

扩展说明

如果存在同一name多条记录拥有相同的最大last_modify_date,可以改用RANK()或DENSE_RANK()替代ROW_NUMBER(),这样会保留所有同最新日期的记录:

SELECT name, [value] AS v, last_modify_date
FROM (
    SELECT 
        name, 
        [value], 
        last_modify_date,
        RANK() OVER (PARTITION BY name ORDER BY last_modify_date DESC) AS rn
    FROM MyTable
) AS sub
WHERE rn = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:18