我正在尝试在 SQL 中创建一个累积总和列,一旦累积总和低于 0,它就会重置为 0。输入:
ID Amount
1 140
2 -50
3 -50
4 -50
5 10
6 -10
7 -5
8 20
预期输出:
ID Amount Cum. Sum
1 140 140
2 -50 90
3 -50 40
4 -50 0
5 10 10
6 -10 0
7 -5 0
8 20 20
我尝试了一个条件,使 value 0 IF 累积和小于 0,但这不起作用。我得到的结果为 ID 5 提供了 0 而不是 10 的累积总和
回答1
您可以使用递归 CTE 来实现您想要的结果。
例如:
with recursive
n as (
(select *, amount as cum_sum from t order by id limit 1)
union all
select t.*, greatest(t.amount + n.cum_sum, 0)
from n
join t on t.id = n.id + 1
)
select * from n order by id
结果:
id amount cum_sum
--- ------- -------
1 140 140
2 -50 90
3 -50 40
4 -50 0
5 10 10
6 -10 0
7 -5 0
8 20 20
请参阅 https://www.db-fiddle.com/f/xwsUB83dfcPWUHY4ySJ8zR/0 上的运行示例。