我正在尝试计算延迟天数的总和(PostgreSQL),但运行总和将在空值时重置。
我试过使用窗口函数:
sum(delay_days)
over (partition by id, status order by id, upper_range_effective_date asc rows between unbounded preceding and current row) as delay_days_sum
但是我没有得到正确的结果
例如,如果我有这样的数据集:
id |status | lower_range_effective_date | upper_range_effective_date| delay_days
----+----------+----------------------------+---------------------------+--------------
1 |failed | 2019-11-06 | 2019-12-05 | 29
1 |failed | 2019-12-05 | 2019-12-16 | 11
1 |completed | 2019-12-16 | 2020-01-06 | <null>
1 |failed | 2019-01-06 | 2020-01-08 | 2
1 |completed | 2019-01-08 | 2020-02-05 | <null>
1 |failed | 2019-02-05 | 2020-02-07 | 2
1 |completed | 2019-02-07 | 2020-03-05 | <null>
1 |failed | 2019-03-05 | 2020-03-19 | 14
1 |completed | 2020-03-19 | 2020-04-06 | <null>
1 |failed | 2020-04-06 | 2020-04-10 | 4
1 |completed | 2020-04-10 | 2020-05-05 | <null>
1 |failed | 2020-05-05 | 2020-06-05 | 31
1 |failed | 2020-06-05 | 2020-07-05 | 30
我希望输出看起来像这样:
id |status | lower_range_effective_date | upper_range_effective_date| delay_days | delay_days_sum
----+----------+----------------------------+---------------------------+----------------+-----------------
1 |failed | 2019-11-06 | 2019-12-05 | 29 |29
1 |failed | 2019-12-05 | 2019-12-16 | 11 |40
1 |completed | 2019-12-16 | 2020-01-06 | <null> |<null>
1 |failed | 2019-01-06 | 2020-01-08 | 2 |2
1 |completed | 2019-01-08 | 2020-02-05 | <null> |<null>
1 |failed | 2019-02-05 | 2020-02-07 | 2 |2
1 |completed | 2019-02-07 | 2020-03-05 | <null> |<null>
1 |failed | 2019-03-05 | 2020-03-19 | 14 | 14
1 |completed | 2020-03-19 | 2020-04-06 | <null> | <null>
1 |failed | 2020-04-06 | 2020-04-10 | 4 | 4
1 |completed | 2020-04-10 | 2020-05-05 | <null> | <null>
1 |failed | 2020-05-05 | 2020-06-05 | 31 | 31
1 |failed | 2020-06-05 | 2020-07-05 | 30 | 61