2017-03-05 56 views
0

我需要找到當前值和前值發現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

回答

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; 
相關問題