发现SQL当前值和前值之间的差异
问题描述:
我需要找到当前值和前值发现SQL当前值和前值之间的差异
这里的差异是一个例子:
这里需要输出:
输出说明:我们需要有一个电流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一些编码,但我没有找到这一块做一个完美的方式..
任何意见将是有益的..
答
的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;
'3Q16'对订购非常不利。如果还不算太晚,我会把它改成“16Q3”。 – shmosel