说我有一张桌子 FruitTable
AsOfDate Fruit Delta
12/8/2016 Apple 10
12/7/2016 Apple -5
12/6/2016 Apple 15
12/4/2016 Apple 30
然而,它的设计使得2016年12月4日(昨天)有我们当天持有的总数。
我想输出:
Date Fruit Cumulative
12/8/2016 Apple 30
12/7/2016 Apple 40
12/6/2016 Apple 35
12/5/2016 Apple 50
这的计算方法如下:
SELECT AsOfDate,
Fruit,
SUM(Delta) OVER (PARTITION BY Fruit ORDER BY AsOfDate DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS CUMULATIVE
FROM FruitTable
因此12/6/2016输出为30 +( - 5)+ 10 = 35且2016年12月7日为30 + 10 = 40 输出12/6/2016 = 2016年12月4日+ 2016年12月7日+ 2016年12月8日
有没有办法在OVER子句中指定特定的行,或者最好的方法是什么?我正在使用SQL SERVER
谢谢
答案 0 :(得分:0)
Declare @YourTable table (AsOfDate date,Fruit varchar(25),Delta int)
Insert Into @YourTable values
('2016-12-08','Apple',10),
('2016-12-07','Apple',-5),
('2016-12-06','Apple',15),
('2016-12-04','Apple',30)
Select AsOfDate
,Fruit
,Delta
,Cumulative = Sum(Delta) over (Partition By Fruit Order By AsOfDate Desc) - Delta + First_Value(Delta) over (Partition By Fruit Order By IIF(Delta is null,1,0),AsOfDate)
From @YourTable
Order By 1 Desc
返回
AsOfDate Fruit Delta Cumulative
2016-12-08 Apple 10 30
2016-12-07 Apple -5 40
2016-12-06 Apple 15 35
2016-12-04 Apple 30 50