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

如何用SQL查询提取日期列中最新年份的所有数据?

提取日期列最新年份所有数据的SQL查询方案

原始数据集

Value.Date
A08/08/2009
A09/12/2021
A05/10/2022
A06/09/2022
A07/08/2022

期望输出

VALUEDATE
A05/10/2022
A06/09/2022
A07/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:45:30