PostgreSQL:计算每月运行总计,其中缺少几个月

时间:2018-08-17 22:32:18

标签: sql postgresql running-total cumulative-sum

我有一个这样的表:

| acct| month | total |
-------------------------------
| 123 | 02    | 100
| 123 | 03    | 100
| 123 | 04    | 100
| 123 | 06    | 100
| 123 | 07    | 100

我想获得每个月按acct分组的运行总计。但是,如上图所示,该表没有第5个月的记录(基本上在第5个月没有任何变化),但是我仍然想为第5个月创建与上一个第4个月相同的行,因此结果看起来像:


| acct| month | total |
-------------------------------
| 123 | 02    | 100
| 123 | 03    | 200
| 123 | 04    | 300
| 123 | 05    | 300
| 123 | 06    | 400
| 123 | 07    | 500

在Postgresql中是否有这样做的方法?我已经探索过使用Calculating Cumulative Sum in PostgreSQL中所述的over和partition的方法,但这是针对存在所有月份的情况。

1 个答案:

答案 0 :(得分:2)

假设您确实想要缺少月份的累积金额,请使用generate_series()生成日期,然后使用left join和累积金额:

select t.acct, gs.mon, sum(total) over (order by mon)
from generate_series(2, 7, 1) gs(mon) left join
     t
     on gs.mon = t.mon;