如何对重置为空值的值执行运行总和

问题描述 投票:0回答:0

我正在尝试计算延迟天数的总和(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
postgresql sum window-functions date-range date-arithmetic
© www.soinside.com 2019 - 2024. All rights reserved.