每 3 天累计 sum() SQL

Cumulative sum() every 3 days SQL

我有一个table这样的

date       amount
2020-02-01    5 
2020-02-02    2 
2020-02-03    10 
2020-02-04    2  
2020-02-06    3 
2020-02-07    1  

我每 3 天需要 sum() 如下:

date       amount   sum
2020-02-01    5      5
2020-02-02    2      7
2020-02-03    10     17
2020-02-04    2      2
2020-02-06    3      5
2020-02-07    1      1
...

所以当天数相差3时,求和应该重新开始。有些日子可能不在 table.

我尝试使用 window 函数(如 sum(amount) over (order by date))来执行此操作,但我不知道如何设置固定的天数并像这样获取累计总和中的日期差异。有可能在任何 SQL?

Disclaimer
The following solution was written based on a Preview version of SQL Server 2022, and thus may not reflect the final release.

有趣的是,如果您可以访问 SQL Server 2022(昨天进入预览版),您可以使用 DATE_BUCKET 将 [=12= 中的日期“四舍五入” ] 到 3 天,使用最小日期作为开始日期。

DECLARE @StartDate date,
        @EndDate date;

SELECT @StartDate = MIN(date),
       @EndDate = MAX(date)
FROM dbo.YourTable;

SELECT date,
       SUM(amount) OVER (PARTITION BY DATE_BUCKET(DAY,3,date,@StartDate) ORDER BY date) AS Amount
FROM dbo.YourTable
WHERE date >= @StartDate
  AND date <= @EndDate; --Incase this would be parametrised

预期的结果图片,因为 2022 年的小提琴不存在:

在 MS Sql 服务器中

select t.[date], t.Amount, sum(t.Amount) over(partition by datediff(d, '2020-02-01', t.[date])/3 order by t.[date]) cum
from tbl t 

'2020-02-01'是您想要的开始日期。