如何用SQL查询提取日期列中最新年份的所有数据?
提取日期列最新年份所有数据的SQL查询方案
原始数据集
| Value. | Date |
|---|---|
| A | 08/08/2009 |
| A | 09/12/2021 |
| A | 05/10/2022 |
| A | 06/09/2022 |
| A | 07/08/2022 |
期望输出
| VALUE | DATE |
|---|---|
| A | 05/10/2022 |
| A | 06/09/2022 |
| A | 07/08/2022 |
问题分析
你需要筛选出日期列对应最新年份的所有记录,之前尝试的TOP 10仅按日期降序取前10条,无法精准匹配年份;MAX(Date)只能返回单个最新日期,无法获取该年份的全部数据。以下是两种可行的解决方案:
方案1:子查询匹配最大年份
通过子查询先获取数据集中的最大年份,再筛选出该年份的所有记录。需根据数据库类型调整年份提取函数,同时注意日期格式的处理:
MySQL(日期为字符串格式时)
SELECT `Value.` AS VALUE, Date AS DATE FROM your_table WHERE YEAR(STR_TO_DATE(Date, '%m/%d/%Y')) = ( SELECT MAX(YEAR(STR_TO_DATE(Date, '%m/%d/%Y'))) FROM your_table );
SQL Server(日期为字符串格式时)
SELECT [Value.] AS VALUE, Date AS DATE FROM your_table WHERE DATEPART(year, CONVERT(date, Date, 101)) = ( SELECT MAX(DATEPART(year, CONVERT(date, Date, 101))) FROM your_table );
若日期已为数据库日期类型
直接简化为:
SELECT `Value.` AS VALUE, Date AS DATE FROM your_table WHERE YEAR(Date) = (SELECT MAX(YEAR(Date)) FROM your_table);
方案2:窗口函数筛选(适用于支持窗口函数的数据库)
使用MAX() OVER()窗口函数计算全局最大年份,再匹配筛选:
SELECT VALUE, DATE FROM ( SELECT `Value.` AS VALUE, Date AS DATE, MAX(YEAR(STR_TO_DATE(Date, '%m/%d/%Y'))) OVER () AS max_year, YEAR(STR_TO_DATE(Date, '%m/%d/%Y')) AS current_year FROM your_table ) t WHERE current_year = max_year;
注:若日期为数据库原生日期类型,可去掉
STR_TO_DATE转换部分。
内容的提问来源于stack exchange,提问作者buddingprogrammer
相关产品推荐
相关产品推荐

