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

如何获取上一年所有记录?代码LastYear列返回本年数据问题

问题分析与修正
  • 核心问题:GETDATE() - 1仅将当前日期减1天,而非一整年,导致@prevYear变量实际获取的是当前年份(仅当当前是1月1日时,减1天才会落到上一年)。WHERE子句过滤出本年数据后,SUM(Amount)自然返回的是本年总和。

修正后的代码

DECLARE @prevYear int
DECLARE @prevMonth int

-- 正确获取上一年:用DATEADD函数减去一整年
SELECT @prevYear = DATEPART(year, DATEADD(year, -1, GETDATE()))
-- 准确获取上个月:用DATEADD减一个月,比固定减30天适配不同月份天数
SELECT @prevMonth = DATEPART(month, DATEADD(month, -1, GETDATE()))

SELECT  
    SUM(CASE 
            WHEN DATEPART(month, [OrderDate]) = @prevMonth  
                THEN Amount 
                ELSE 0 
        END) AS LastMonth,    
    SUM(Amount) AS LastYear
FROM 
    Orders
INNER JOIN 
    OrderDetail ON Orders.OrderID = OrderDetail.OrderID 
WHERE 
    DATEPART(year, [OrderDate]) = @prevYear

额外优化说明

  • 计算上个月时,DATEADD(month, -1, GETDATE())比固定减30天更可靠,能适配不同月份的天数差异(比如2月、31天的大月),保证拿到准确的上个月日期。
  • 列别名无需加单引号,直接写LastMonth即可,加单引号属于非标准写法,虽多数数据库兼容,但不符合SQL最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:19:54