如何计算每月 运行 总数?
How to calculate running total per month?
我在 PostgreSQL 中有一个 table:
date
value
'2020-06-02'
150
'2020-06-03'
7891
'2020-07-02'
392
...
...
我需要为 table 中的每个日期获取 运行 列中 value
的总数。 运行 总数中 value
的总和必须在行中日期的月份的第一个日期和行中的日期之间的日期范围内计算。
示例:
- 对于第一行中的日期
'2020-06-02'
,必须在 '2020-06-01'
和当前日期 ('2020-06-02'
) 之间的范围内计算 value
列的总和,包括当前日期的数字。
- 对于第二行中的日期,必须在
'2020-06-01'
和当前日期 ('2020-06-03'
) 之间的日期范围内计算 value
列中的数字总和,包括数字'2020-06-03'
.
- 对于第三行,必须在
'2020-07-01'
和 '2020-07-02'
之间的日期范围内计算 value
列中的数字总和。
- 等等...
如何实现?具有 window 功能?
实际上:
SELECT date
, sum(value) OVER (PARTITION BY date_trunc('month', date) ORDER BY date)
FROM tbl;
请注意,对等行(根据您的分区和排序顺序)得到相同的结果。意思是,重复的每一天都得到相同的 运行 总和,包括它们的所有值。
我在 PostgreSQL 中有一个 table:
date | value |
---|---|
'2020-06-02' | 150 |
'2020-06-03' | 7891 |
'2020-07-02' | 392 |
... | ... |
我需要为 table 中的每个日期获取 运行 列中 value
的总数。 运行 总数中 value
的总和必须在行中日期的月份的第一个日期和行中的日期之间的日期范围内计算。
示例:
- 对于第一行中的日期
'2020-06-02'
,必须在'2020-06-01'
和当前日期 ('2020-06-02'
) 之间的范围内计算value
列的总和,包括当前日期的数字。 - 对于第二行中的日期,必须在
'2020-06-01'
和当前日期 ('2020-06-03'
) 之间的日期范围内计算value
列中的数字总和,包括数字'2020-06-03'
. - 对于第三行,必须在
'2020-07-01'
和'2020-07-02'
之间的日期范围内计算value
列中的数字总和。 - 等等...
如何实现?具有 window 功能?
实际上:
SELECT date
, sum(value) OVER (PARTITION BY date_trunc('month', date) ORDER BY date)
FROM tbl;
请注意,对等行(根据您的分区和排序顺序)得到相同的结果。意思是,重复的每一天都得到相同的 运行 总和,包括它们的所有值。