sql - 运行不低于 0 的总/累计和 SQL

我正在尝试在 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 上的运行示例。

相似文章

最新文章