| 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的方法,但这是针对存在所有月份的情况。
答案 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;