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

SQL Server 2019中无需CTE/子查询获取上季度销售信息

解决方案:无需CTE/子查询实现需求

假设你的MonthlySales表包含SaleDate(销售日期)、SalePrice(销售价格)等核心字段,在SQL Server 2019中可以直接通过单条SELECT语句完成需求,无需CTE或子查询:

SELECT
    SaleDate,
    SalePrice,
    -- 同季度的上一笔销售价格
    LAG(SalePrice) OVER (
        PARTITION BY DATEPART(QUARTER, SaleDate) 
        ORDER BY SaleDate
    ) AS SameQuarterPreviousPrice,
    -- 所属季度的上一个季度
    CASE 
        WHEN DATEPART(QUARTER, SaleDate) = 1 THEN 4
        ELSE DATEPART(QUARTER, SaleDate) - 1
    END AS PreviousQuarter
FROM MonthlySales
WHERE YEAR(SaleDate) = 2007;

关键说明:

  1. 同季度上一笔价格:
    使用LAG函数时,通过PARTITION BY DATEPART(QUARTER, SaleDate)将数据按季度分区,确保只在当前季度内查找上一条记录;ORDER BY SaleDate保证按销售时间顺序取前一条——这应该是你之前直接用LAG未得到预期结果的核心原因:缺少按季度的分区逻辑。

  2. 上一个季度计算:
    通过CASE处理Q1的特殊情况(Q1的上一个季度对应上一年的Q4,季度数为4),其他季度直接减1即可。如果需要带上年份(比如2007Q1的上一个季度显示为2006Q4),可以调整为:

    CONCAT(
         YEAR(SaleDate) - CASE WHEN DATEPART(QUARTER, SaleDate) = 1 THEN 1 ELSE 0 END,
         'Q',
         CASE WHEN DATEPART(QUARTER, SaleDate) = 1 THEN 4 ELSE DATEPART(QUARTER, SaleDate) - 1 END
     ) AS PreviousQuarterWithYear
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:55:55