【问题标题】:Postgresql: Calculate monthly running total with some months missingPostgresql:计算缺少某些月份的每月运行总数
【发布时间】:2019-01-24 23:31:16
【问题描述】:

我有一张这样的桌子:

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

我想获得按帐户分组的每个月的运行总计。但是如上所示,该表没有第 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 中有没有办法做到这一点?我已经探索过使用这里描述的 over 和 partition Calculating Cumulative Sum in PostgreSQL 但这是针对所有月份都存在的情况。

【问题讨论】:

  • 这怎么加起来是600?原表中只有 500 个。
  • 糟糕,现在已修复

标签: sql postgresql cumulative-sum


【解决方案1】:

假设您确实想要一个缺少月份的累积总和,请使用 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多