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

如何通过GROUP BY获取SQL分组最后一条记录的Value值?

获取分组最后一行的Value值

示例数据

Id   Name    Value
------------------
1     A       1
2     A       2
3     B       3
4     B       2
5     B       1

当前查询及结果

执行以下GROUP BY查询:

select Name, Max(Value)
from TableName
GROUP BY Name

得到结果:

A 2
B 3

需求

需要获取每个按Name分组的最后一行的Value值,期望结果:

A 2
B 1

解决方案

根据你使用的数据库版本,可选择以下几种方法:

1. 窗口函数法(推荐,适用于MySQL 8.0+、SQL Server、PostgreSQL、Oracle等)

利用ROW_NUMBER()窗口函数给每个分组内的行按Id倒序编号,取编号为1的行就是分组的最后一行:

SELECT Name, Value
FROM (
    SELECT 
        Name, 
        Value,
        ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id DESC) AS rn
    FROM TableName
) t
WHERE rn = 1;
  • PARTITION BY Name:按Name分组
  • ORDER BY Id DESC:让每个分组里Id最大的行(最后一行)排在最前面,编号为1
  • 外层筛选rn=1的行,得到目标结果

2. 关联子查询法(兼容大多数数据库)

先找出每个Name对应的最大Id(即分组最后一行的Id),再关联原表获取对应Value:

SELECT t.Name, t.Value
FROM TableName t
INNER JOIN (
    SELECT Name, MAX(Id) AS MaxId
    FROM TableName
    GROUP BY Name
) g ON t.Name = g.Name AND t.Id = g.MaxId;

3. 低版本MySQL专属写法(MySQL 5.7及以下)

如果你的MySQL不支持窗口函数,可用相关子查询直接筛选:

SELECT Name, Value
FROM TableName t
WHERE Id = (SELECT MAX(Id) FROM TableName WHERE Name = t.Name);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:42:37