假设我有一个名为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天总和,即.过go 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,无论我如何try ,都无法得到移动/运行总数.我try 过复制使用窗口函数和按范围划分的示例.我相信这将会很简单,然而现在它正在击败我.

推荐答案

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;

您可以try 此查询

Sql相关问答推荐

如何重用表值用户定义函数调用的结果?

Select /过滤postgr中的树 struct

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

SQL查询组类值在同一行中,并连接和排序其他值

LAG函数通过丢弃空值返回前一行

retrofit AWS Athena中的JSON

获得第三名或最老的记录

MS Access问题查询中的自定义字段

从单个表达式中的分隔字符串中取平均值

使用多个WITH子查询的替代方法

SQL按组 Select 最小值,当值不存在时为Null

如何在T-SQL中编写row_number的WHERE子句?

Snowflake 中的分层数据

SQL 如何根据当前事件和下一个事件确定操作的持续时间?

如何在 JSONB 数组的每个对象中添加新的键值对- PostgreSQL

如何优化仅返回符合条件的三条记录的查询?

如何将输出转换为二维格式?

MS ACCESS 错误插入 X(...) 从 A 联合 Select ... 从 B

在给定列中具有特定值的行与 SQL 中的总行数的比率

如何根据另一列对行值进行分组?