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

SQL查询如何添加上年同期累计销售额列(PYRunnTot)

解决方案

要实现获取上一年同期累计销售额的需求,你可以先通过CTE(公用表表达式)计算出所有日期的当年累计值,再通过自连接关联上一年同期的记录,提取对应的累计销售额。以下是具体的SQL实现:

WITH SalesWithRunningTot AS (
    SELECT        
        date, 
        Sales, 
        SUM(Sales) OVER (PARTITION BY YEAR(date) ORDER BY date) AS RunningTot
    FROM            
        Sales
)
SELECT
    s1.date,
    s1.Sales,
    s1.RunningTot,
    s2.RunningTot AS PYRunnTot
FROM SalesWithRunningTot s1
LEFT JOIN SalesWithRunningTot s2
    ON DATEADD(YEAR, -1, s1.date) = s2.date;

思路说明

  1. CTE计算累计值:先通过SalesWithRunningTot这个CTE生成包含日期、销售额、当年累计销售额的数据集,这部分和你原查询的逻辑一致。
  2. 自连接关联上年同期:通过LEFT JOIN将CTE自身关联,连接条件为当前日期减去一年后等于关联表的日期,这样就能精准匹配上一年同期的记录,进而取出对应的累计销售额作为PYRunnTot。如果没有上一年同期的记录(比如最早年份的日期),PYRunnTot会显示为NULL,符合你期望的结果格式。

数据库兼容说明

如果你的数据库不支持DATEADD函数(比如MySQL),可以改用DATE_SUB函数调整日期:

WITH SalesWithRunningTot AS (
    SELECT        
        date, 
        Sales, 
        SUM(Sales) OVER (PARTITION BY YEAR(date) ORDER BY date) AS RunningTot
    FROM            
        Sales
)
SELECT
    s1.date,
    s1.Sales,
    s1.RunningTot,
    s2.RunningTot AS PYRunnTot
FROM SalesWithRunningTot s1
LEFT JOIN SalesWithRunningTot s2
    ON DATE_SUB(s1.date, INTERVAL 1 YEAR) = s2.date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:46