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

SQL查询问题:同一ID下选取Col2值更大的行

解决重复ID下选取Col2最大值行的SQL方案

嘿,这个需求太常见了!我来给你几个实用的解法,覆盖不同的场景和数据库版本。先再明确下你的问题场景:

数据表中存在多行相同ID的记录,需要为每个ID仅保留Col2值最大的那一行。示例数据如下:

IDCol2
1231
1232
12342
123453

预期输出:

IDCol2
1232
12342
123453

方法1:基础GROUP BY + 聚合函数

如果你的需求只需要ID和Col2这两个字段,这个方法最简单直接:

SELECT ID, MAX(Col2) AS Col2
FROM your_table_name
GROUP BY ID;

原理:用GROUP BY ID把相同ID的记录归为一组,再通过MAX(Col2)提取每组里的最大Col2值,一步到位得到结果。

方法2:窗口函数(推荐,支持多字段保留)

如果你的表还有其他字段需要一起查询,窗口函数会更灵活,这里用ROW_NUMBER()举例:

WITH ranked_data AS (
    SELECT 
        ID, 
        Col2,
        -- 这里可以添加你需要保留的其他字段
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Col2 DESC) AS rn
    FROM your_table_name
)
SELECT ID, Col2 -- 同步添加其他需要的字段
FROM ranked_data
WHERE rn = 1;

原理:

  • PARTITION BY ID按ID分组,ORDER BY Col2 DESC让每组内Col2最大的行排在最前面
  • ROW_NUMBER()给每组内的行分配一个序号,序号为1的就是我们要的目标行

小提示:如果同一个ID下有多个行的Col2值相同且都是最大值,想要保留所有这些行的话,把ROW_NUMBER()换成RANK()或者DENSE_RANK()就行。

方法3:子查询关联(兼容旧版数据库)

如果你的数据库不支持窗口函数(比如一些老版本的MySQL),可以用子查询关联的方式:

SELECT t1.ID, t1.Col2
FROM your_table_name t1
INNER JOIN (
    SELECT ID, MAX(Col2) AS max_col2
    FROM your_table_name
    GROUP BY ID
) t2 ON t1.ID = t2.ID AND t1.Col2 = t2.max_col2;

原理:先通过子查询找出每个ID对应的最大Col2值,再把这个结果和原表关联,匹配出ID相同且Col2等于最大值的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:54:26