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

如何使用聚合函数获取分组后最新日期行的对应列值?

获取每组最新日期对应NumItems的SQL写法

下面是几种可行的解决办法:

方法一:窗口函数(推荐,支持MySQL8+、PostgreSQL、SQL Server等)

用ROW_NUMBER()给每个客户分组内的记录按日期倒序排号,取排号为1的就是最新那条:

SELECT CustomerId, Date, NumItems
FROM (
    SELECT 
        CustomerId,
        Date,
        NumItems,
        ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY Date DESC) AS rn
    FROM SALES
) t
WHERE rn = 1;

要是同一个客户有多个记录日期相同且都是最新的,想保留所有这些记录,把ROW_NUMBER()换成RANK()就行。

方法二:关联子查询(兼容多数数据库)

先查出每个客户的最大日期,再和原表关联拿到对应的NumItems:

SELECT s.CustomerId, s.Date, s.NumItems
FROM SALES s
INNER JOIN (
    SELECT CustomerId, MAX(Date) AS MaxDate
    FROM SALES
    GROUP BY CustomerId
) t ON s.CustomerId = t.CustomerId AND s.Date = t.MaxDate;

这种写法如果同一个客户有多个最新日期的记录,会返回所有符合条件的行。

方法三:聚合函数+CASE(适合部分数据库,比如MySQL)

如果你的数据库允许在聚合函数里用CASE,也可以这么写,但数据量大时性能不如前两种:

SELECT
    CustomerId,
    MAX(Date) AS LatestDate,
    MAX(CASE WHEN Date = (SELECT MAX(Date) FROM SALES s2 WHERE s2.CustomerId = s.CustomerId) THEN NumItems END) AS NumItems
FROM SALES s
GROUP BY CustomerId;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:15:28