postgresql 如何使用SQL生成数据的滚动3天总和[重复]

wkyowqbh  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(107)

这个问题已经有答案了

Calculating Cumulative Sum in PostgreSQL(1个答案)
18天前关闭
假设我有一个名为values的简单表:

ID   day         value
 1   2023-09-21     37
 2   2023-09-21     14
 3   2023-09-22     42
 4   2023-09-23      9
 5   2023-09-23     10
 6   2023-09-23     11
 7   2023-09-24     14
 8   2023-09-24     16
 9   2023-09-25      6
10   2023-09-25      4
11   2023-09-26     17
12   2023-09-27     22
13   2023-09-28     31
14   2023-09-28      9

我想生成一个滚动3天的总和,即。过去3天的总计,每天。
所以最终的结果是:

day         total
2023-09-21     51  (21st = 37+14)
2023-09-22     93  (21st + 42)
2023-09-23    123  (21st + 22nd + (9+10+11))
2023-09-24    102  (22nd + 23rd + (14+16))
2023-09-25     70  (23rd + 24th + (6+4))
2023-09-26     57  (24th + 25th + 17)
2023-09-27     49  (25th + 26th + 22)
2023-09-28     79  (26th + 27th + (31+9))

我可以很容易地计算出每天的总收入。

SELECT day, sum(value) as daily_total
FROM values
GROUP by day
ORDER BY day

这给了我:

day   daily_total
2023-09-21     51
2023-09-22     42
2023-09-23     30
2023-09-24     30
2023-09-25     10
2023-09-26     17
2023-09-27     22
2023-09-28     40

我正在使用最新版本的PostgreSQL,无论我怎么尝试,我都无法获得移动/运行总数。我尝试过复制使用窗口函数和按范围分区的示例。我相信这会很简单,但它正在击败我的时刻。

2mbi3lxu

2mbi3lxu1#

SELECT a.day,
       SUM(a.value) OVER (
           ORDER BY a.day
           ROWS BETWEEN 2 PRECEDING AND
               CURRENT ROW
           ) AS total
FROM (SELECT day, SUM(value) AS value
      FROM values
      GROUP BY day) AS a
ORDER BY a.day;

你可以试试这个查询

相关问题