Oracle SQL:如何筛选包含最新日期的记录
提取每个id最新日期对应的Y记录
针对需求(从表中获取每个id下DATE为最新值的Y列记录),以下是几种常用的SQL实现方案:
方案1:窗口函数(推荐,支持SQL Server、MySQL 8.0+、PostgreSQL等)
使用ROW_NUMBER()窗口函数按id分组,对每组按DATE降序排序,取排序后第一条记录:
SELECT id, Y, DATE FROM ( SELECT id, Y, DATE, -- 按id分组,每组内按DATE倒序编号 ROW_NUMBER() OVER (PARTITION BY id ORDER BY DATE DESC) AS row_num FROM your_table ) ranked_data WHERE row_num = 1;
方案2:子查询关联(兼容低版本MySQL等不支持窗口函数的数据库)
先通过子查询获取每个id的最大日期,再关联原表匹配对应记录:
SELECT t.id, t.Y, t.DATE FROM your_table t JOIN ( -- 分组获取每个id的最新日期 SELECT id, MAX(DATE) AS latest_date FROM your_table GROUP BY id ) latest_dates ON t.id = latest_dates.id AND t.DATE = latest_dates.latest_date;
执行结果示例
以上两种方案执行后,都会得到符合需求的结果:
| id | Y | DATE |
|---|---|---|
| a | 2 | 2022 |
| b | 1 | 2015 |
| c | 7 | 2010 |
内容的提问来源于stack exchange,提问作者SQL_Python_DataScience
相关产品推荐
相关产品推荐

