2017-06-06 52 views
1

我有一个类似于下面的表格。我期待找到从最近一周到最后一周的百分比变化。我不完全确定什么是最好的方法来确定前一周是什么是关于ItemID为了做出减法。如果没有子查询或创建TEMP表并指定某种排名ID以确定哪个日期是此ItemID的先前日期,我认为我无法绕过此操作。任何帮助?SQL Server:如何查找以前的百分比变化?

当前表:

SalesDate ItemID COUNT TotCount PERC 
---------------------------------------------------- 
3/11/2017 1  7  755   0.009271523 
1/11/2017 1  6  670   0.008955224 
12/31/2016 1  5  655   0.007633588 
12/17/2016 1  4  635   0.006299213 
11/9/2016 1  3  580   0.005172414 
10/22/2016 1  2  555   0.003603604 
9/21/2016 1  1  510   0.001960784 

所需的表与最新PERC减去之前日期PERC(即2017年3月11日PERC减去2017年1月11日PERC将等于0.000316299):

SalesDate ItemID COUNT TotCount PERC   change 
---------------------------------------------------------------- 
3/11/2017 1  7  755   0.009271523 0.000316299 
1/11/2017 1  6  670   0.008955224 0.001321636 
12/31/2016 1  5  655   0.007633588 0.001334375 
12/17/2016 1  4  635   0.006299213 0.001126799 
11/9/2016 1  3  580   0.005172414 0.00156881 
10/22/2016 1  2  555   0.003603604 0.001642819 
9/21/2016 1  1  510   0.001960784 0.001960784 

编辑:为了清楚起见,我在此表中有多个ItemID,因此该子查询需要考虑到以前的日期特定于ItemID

回答

3

您将使用lag()。我会写这样的:

select t.*, 
     (perc - lag(perc) over (partition by itemId order by SalesDate)) as diff 
from t; 

这将返回NULL的最后一排。你可以通过这样做来解决这个问题:

select t.*, 
     (perc - lag(perc, 1, 0) over (partition by itemId order by SalesDate)) as diff 
from t;