首页 > 解决方案 > SQL Server - 反向累积和

问题描述

我有一个需要反转的累积总和。如何在 SQL Server 中执行此操作?

例子:

+---+-------------------+-----+
| id|               date|value|
+---+-------------------+-----+
| J1|2016-10-01 11:45:30|  100|
| J1|2016-10-02 11:30:30|  200|
| J1|2016-10-05 16:20:00|  400|
| J9|2016-10-06 08:35:00|  800|
| J9|2016-10-07 01:20:00|  900|
+---+-------------------+-----+

所需的数据框:

+---+-------------------+-----+---------+
| id|               date|value|non_cum_value|
+---+-------------------+-----+---------+
| J1|2016-10-01 11:45:30|  100|        0|
| J1|2016-10-02 11:30:30|  200|      100|
| J1|2016-10-05 16:20:00|  400|      200|
| J9|2016-10-06 08:35:00|  800|      400|
| J9|2016-10-07 01:20:00|  900|      100|
+---+-------------------+-----+---------+

我的代码:

select t1.id, t1.value, DIFFERENCE(t1.value) as 'cum_sum'
from @t t1
inner join @t t2 on t1.id >= t2.id
group by t1.id, t1.value
order by t1.id

标签: sqlsql-servercumulative-sum

解决方案


嗯。. . 您似乎想从“上一个”行中减去该值。那将是:

select t.*,
       (t.value - lag(t.val) over (order by date)) as diff
from @t;

我不确定为什么标题中有“累计金额”。这无助于我理解你想要做什么。


推荐阅读