发现SQL当前值和前值之间的差异

问题描述:

我需要找到当前值和前值发现SQL当前值和前值之间的差异

这里的差异是一个例子:

enter image description here

这里需要输出:

enter image description here

输出说明:我们需要有一个电流VA lue和以前的值,并需要找到value_diff。

E.g.我们在2016年1季度和2016年2季度有500家,所以它们之间的差异是0 ..所以,它需要在2016年2季度行的value_diff列中显示0。

我们在2016年3季度有1000家,所以3Q16和2Q16之间的差异就是500 ..所以需要在3Q16行的value_diff列中显示500。

我尝试使用CTE一些编码,但我没有找到这一块做一个完美的方式..

任何意见将是有益的..

+1

'3Q16'对订购非常不利。如果还不算太晚,我会把它改成“16Q3”。 – shmosel

的SQL Server 2012+支持lag()直接做到这一点。在SQL Server 2008中,我会推荐一个outer apply。首先,我认为quarter是正确登录订单,如YYYY-Q合理的格式:

select t.*, (t.value - tprev.value) as diff 
from t outer apply 
    (select top 1 tprev.* 
     from t tprev 
     where tprev.id = t.id and 
      tprev.yyyyq < t.yyyyq 
     order by tprev.yyyyq desc 
    ) tprev; 

您有quarter一个糟糕的格式。让我们用CTE修正:

with t as (
     select e.*, 
      ('20' + right(quarter, 2)) + '-' + left(quarter, 1)) as yyyyq 
     from example e 
    ) 
select t.*, (t.value - tprev.value) as diff 
from t outer apply 
    (select top 1 tprev.* 
     from t tprev 
     where tprev.id = t.id and 
      tprev.yyyyq < t.yyyyq 
     order by tprev.yyyyq desc 
    ) tprev;