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

SQL Server 如何按产品取最新日期对应最大ID的记录

问题原因分析

你原来的SQL写法存在逻辑错误:GROUP BY Name后分别取MAX(ID)和MAX(Date)是独立计算的两个聚合结果,两者不一定属于同一条记录,因此会出现最大日期和最大ID不匹配的情况。

正确实现方案

SQL Server中可以使用窗口函数ROW_NUMBER()实现需求,逻辑是先对每个产品的记录按优先级排序,再取排序第一的记录即可:

WITH RankedProducts AS (
    SELECT 
        ID,
        Name,
        Date,
        ROW_NUMBER() OVER (
            PARTITION BY Name 
            ORDER BY Date DESC, ID DESC
        ) AS row_num
    FROM product
)
SELECT ID, Name, Date
FROM RankedProducts
WHERE row_num = 1
逻辑说明
  • PARTITION BY Name:将所有记录按产品名称分组,同产品的记录放在同一个分区处理
  • ORDER BY Date DESC:每个分区内按日期倒序排列,保证最晚日期的记录排在最前
  • ORDER BY ID DESC:同一日期下的记录按ID倒序排列,保证ID最大的记录排在最前
  • 最后筛选row_num = 1的记录,就是每个产品符合要求的唯一目标记录
结果验证

用你提供的样例数据执行上述SQL,输出结果和预期完全一致:

IDNameDate
289ABC4/3/2017
631XYZ4/12/2015

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:27:03