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

SQL实现从两列提取唯一值并获取ID对应最新日期

获取每个ID对应的最新日期(提取唯一ID+最新日期)

没问题,这种同一个ID对应多个日期导致重复的场景太常见了!我给你几种实用的SQL方案,帮你快速得到每个ID对应的最新日期,完美满足你提取两列唯一值的需求。

假设你的表名为your_table,ID列是id,日期列是date_column(记得替换成你实际的表名和列名哦):

方法1:窗口函数(推荐,适配绝大多数现代数据库)

窗口函数是最直观高效的方式,尤其适合数据量较大的场景。我们用ROW_NUMBER()给每个ID的记录按日期倒序编号,然后只取编号为1的那条(也就是最新的记录):

SELECT id, date_column
FROM (
    SELECT 
        id, 
        date_column,
        -- 按ID分组,每组内按日期从新到旧排序,给每条记录编号
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY date_column DESC) AS row_num
    FROM your_table
) AS temp
WHERE row_num = 1;

如果同一个ID在同一天有多条记录,你想保留所有这些最新日期的记录,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK(),这样同日期的记录会得到相同的编号,不会被过滤掉。

方法2:GROUP BY + MAX()(极简方案,仅需两列时首选)

既然你只需要ID和日期两列,这种方式最简洁直接:

SELECT id, MAX(date_column) AS latest_date
FROM your_table
GROUP BY id;

它会自动按ID分组,直接取出每组中最大的日期值,结果就是每个ID对应的最新日期,天然去重。

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

如果你的数据库不支持窗口函数(比如MySQL 5.7及更早版本),可以用子查询关联的方式实现:

SELECT t1.id, t1.date_column
FROM your_table t1
INNER JOIN (
    -- 先拿到每个ID的最新日期
    SELECT id, MAX(date_column) AS latest_date
    FROM your_table
    GROUP BY id
) t2 
ON t1.id = t2.id AND t1.date_column = t2.latest_date;

这个方法先通过子查询获取每个ID的最新日期,再关联原表拿到对应的完整记录。

小提示

  • 如果你的日期列是带时间的datetime类型,MAX()函数同样能正确识别最新的时间点。
  • 如果存在NULL值,可以根据业务需求在MAX()里加上COALESCE处理,或者提前过滤掉NULL记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:13:48