【问题标题】:SQL Server - Cumulative Sum over Last 12 Months, but starting from the Last Month (SQL Server 18)SQL Server - 过去 12 个月的累计总和,但从上个月开始 (SQL Server 18)
【发布时间】:2020-02-06 18:16:31
【问题描述】:

我需要计算过去 12 个月内某个值的累积总和。到目前为止,我的累积计算是有效的,但从当月开始。 我需要从上个月开始的过去 12 个月的总数。 目前,我在 SQL 上使用OVER 子句,从当前行/月开始运行累计总数。

请参考下面我的代码示例:

SELECT  *,
         SUM(Amount) OVER (PARTITION BY ID ORDER BY Date_Month ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) AS TwelveMoTtl
         FROM ( 
    SELECT DISTINCT
        CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, TransactionDt), 0) AS DATE)   AS Date_Month,
        ID,
        SUM(Amount) AS Amount
    FROM MyTable
    WHERE TransactionDt >= '2019-01-01'
    GROUP BY
        ID,
        CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, TransactionDt), 0) AS DATE)

这是我的结果(仅使用一个 ID 来简化示例):

作为我的示例,计算从当前行开始,并在过去 12 个月内运行。

如果我们以二月行为例,我需要从 2020 年 1 月到 2019 年 2 月的累计总和。

有什么建议吗?

谢谢,

【问题讨论】:

  • ROWS BETWEEN 12 PRECEDING AND 1 PRECEDING ?

标签: sql sql-server


【解决方案1】:

您似乎非常了解窗口函数。你只需要调整窗框:

SUM(Amount) OVER (PARTITION BY ID
                  ORDER BY Date_Month
                  ROWS BETWEEN 12 PRECEDING AND 1 PRECEDING
                 ) 

【讨论】:

  • 为什么不直接按 desc 排序?
  • @Bloodday 。 . .因为那不会满足 OP 的要求。
  • 嗨!非常感谢,正如我所料,它工作得很好。
  • @RafaelFloridoPereira 。 . .如果这回答了您的问题,您可以考虑接受答案。
  • 感谢@GordonLinoff,问候!
【解决方案2】:

我忘记了我的表中可能有 NULL 行。因此,即使缺少日期,也可以进行累积总和的解决方案。例如:

我需要运行过去 12 个日历月,无论这些月是否有金额。

有什么想法吗?

谢谢,

拉斐尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2019-04-09
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多