簡體   English   中英

SQL Server - 反向累積和

[英]SQL Server - Reverse Cumulative Sum

我有一個需要沖銷的累計金額。 如何在 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

嗯嗯。 . . 您似乎想從“上一個”行中減去該值。 那將是:

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

我不確定你為什么在標題中有“累計金額”。 這無助於我理解你想要做什么。

另一種可能性是:

SELECT *, V - SUM(V) OVER(ORDER BY D ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
FROM   T

假設測試數據為:

CREATE TABLE T (ID CHAR(2), D DATE, V FLOAT);

INSERT INTO T VALUES 
('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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM