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

查询表中唯一id对应最新version的记录(含Top N高id需求)

Got it,针对你的需求,我分两种场景给你提供SQL解决方案,都是基于你给出的表结构和测试数据来写的:

1. 获取所有唯一id对应的最新version记录

方法一:窗口函数(推荐,适合现代数据库)

这是最简洁高效的写法,支持MySQL 8+、PostgreSQL、SQL Server等大部分主流数据库:

SELECT id, version, data
FROM (
    SELECT 
        id, 
        version, 
        data,
        -- 按id分组,每组内按version降序编号,最新版本排第1
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY version DESC) AS rn
    FROM foo
) t
WHERE rn = 1;

用你提供的测试数据,执行后会返回每个id的最新版本记录:

id | version | data
---|---------|-----
1  | 3       | 1.3
2  | 2       | 2.2
3  | 1       | 3.1
4  | 2       | 4.2

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

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用这种方式:

SELECT f.id, f.version, f.data
FROM foo f
-- 子查询先算出每个id的最大version
INNER JOIN (
    SELECT id, MAX(version) AS max_version
    FROM foo
    GROUP BY id
) mv ON f.id = mv.id AND f.version = mv.max_version;

这个逻辑和上面一致,只是用子查询+关联的方式实现,结果也完全相同。

2. 获取id值最高的N条对应最新version的记录

这个需求需要先拿到每个各宝的 % men(用时原发展到2多条出追求Panel的最新记录,再按id降序取前N条。同样分两种写法:

方法一:窗口函数+排序取前N

SELECT id, version, data
FROM (
    SELECT 
        id, 
        version, 
        data,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY version DESC) AS rn
    FROM foo
) t
WHERE rn = 1
-- 按id降序排序,取前N条(把N换成你要的数字,比如2)
ORDER BY id DESC
LIMIT N;

比如N=2时,执行结果会是id最大的两个最新记录:

id | version | data
---|---------|-----
4  | 2       | 4.2
3  | 1       | 3.1

方法二:关联子查询+排序取前N

SELECT f.id, f.version, f.data
FROM foo f
INNER JOIN (
    SELECT id, MAX(version) AS max_version
    FROM foo
    GROUP BY id
) mv ON f.id = mv.id AND f.version = mv.max_version
ORDER BY f.id DESC
LIMIT N;

注意:如果是SQL Server,把LIMIT N换成TOP N;如果是Oracle,换成FETCH FIRST N ROWS ONLY或者使用ROWNUM逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:31:22