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

如何筛选单表中各分组的最高version记录,排除旧版本?

获取单表中每个分组的最高版本记录

我有一个单表,其中存在多条同一name的不同version记录,需要获取每个name对应的最高version记录。

表结构及示例数据

Id  name   value   version
1   raj    java      8
2   raj    stack     4
3   prem   abc       6
4   raj    google    1
5   prem   pqr       11

还有更多类似数据。

期望输出

Id  name   value   version
1   raj    java      8
5   prem   pqr       11

我曾参考过Stack Overflow上的相关问题,但该问题针对多表场景,未找到单表的解决方案。

解决方案

方法1:子查询关联(通用写法)

适用于绝大多数SQL数据库:

SELECT t1.*
FROM your_table t1
INNER JOIN (
    SELECT name, MAX(version) AS max_version
    FROM your_table
    GROUP BY name
) t2 ON t1.name = t2.name AND t1.version = t2.max_version;

先通过子查询按name分组,提取每个分组的最高版本值,再关联原表匹配对应完整记录。

方法2:窗口函数(高效简洁)

适用于支持窗口函数的数据库(如MySQL 8+、PostgreSQL、SQL Server等):

SELECT Id, name, value, version
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY version DESC) AS rn
    FROM your_table
) t
WHERE rn = 1;

通过PARTITION BY name按名称分组,ORDER BY version DESC让组内版本最高的记录排在首位,ROW_NUMBER()为每条记录分配组内编号,最后筛选出编号为1的记录即可。

如果同一name下存在多个相同最高版本的记录,想保留所有这类记录,可将ROW_NUMBER()替换为RANK()或DENSE_RANK()。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13