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

在SQL Server 2022中如何动态获取表的最近12个月数据?

获取最近12个月数据的SQL方案(SQL Server 2022)

假设你的表名为YourTableName,先将表中的Year和MonthID字段组合成可计算的日期值,再筛选符合条件的记录。以下提供两种常见场景的实现:

场景1:基于当前系统日期的最近12个月

该方案以当前日期为基准,筛选过去12个月内的所有记录:

SELECT 
    Year,
    MonthID,
    Value
FROM 
    YourTableName
WHERE 
    DATEFROMPARTS(Year, MonthID, 1) >= DATEADD(MONTH, -12, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))
ORDER BY 
    Year DESC, 
    MonthID DESC;

代码说明

  • DATEFROMPARTS(Year, MonthID, 1):将Year和MonthID转换为对应月份的第一天(比如2023和3转为2023-03-01),方便日期比较。
  • DATEADD(MONTH, -12, ...):计算当前月份第一天往前推12个月的日期,作为筛选的起始边界。
  • 最后按年月倒序排列,方便查看最新数据。

场景2:基于表中最大年月的最近12个月

如果需要以表中已存在的最晚年月为基准,筛选其过去12个月的记录(适合数据未同步到当前月份的场景):

WITH MaxYearMonth AS (
    SELECT 
        MAX(DATEFROMPARTS(Year, MonthID, 1)) AS MaxMonthDate
    FROM 
        YourTableName
)
SELECT 
    t.Year,
    t.MonthID,
    t.Value
FROM 
    YourTableName t
CROSS JOIN 
    MaxYearMonth m
WHERE 
    DATEFROMPARTS(t.Year, t.MonthID, 1) >= DATEADD(MONTH, -12, m.MaxMonthDate)
ORDER BY 
    t.Year DESC, 
    t.MonthID DESC;

代码说明

  • 先用CTEMaxYearMonth获取表中最新的月份日期。
  • 通过CROSS JOIN将该最大日期与主表关联,筛选出该日期往前12个月内的所有记录。

注意事项

  • 请将YourTableName替换为你的实际表名。
  • 如果表中存在缺失的月份,上述语句只会返回存在的记录;若需要补全缺失月份并显示0或NULL,需额外生成连续月份列表进行左连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:24