我需要找出当前值与之前值之间的差异
以下是一个例子:
这是必需的输出:
输出说明:我们需要在当前值和之前的值之间有区别,需要找到value_diff。
E.g。我们在1Q16和2016年第2季度有500个,因此,它们之间的差异为0 ..因此,它需要在2Q16行的value_diff列中显示0。
我们在2016年第3季度有1000个,因此2016年第3季度和2016年第2季度之间的差异为500.因此,它需要在2016年第3季度的value_diff列中显示500个。
我尝试使用CTE进行编码,但我找不到完美的方法来做这个..
任何建议都会有所帮助..
答案 0 :(得分:2)
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;