2016-08-03 76 views
1

數據的例子:如果order子句中的當前值與以前的特定值不同,則獲取前一個行值?

part val 
1 3.0 
2 4.0 
3 5.0 
5 6.0 

我需要從塔「VAL」得到上一列,如果電流值列「份」比以前更大的由1

的所期望的結果的例子:

part val val_lag1 
1 3.0 NULL 
2 4.0 3.0 
3 5.0 4.0 
5 6.0 NULL 

通過使用LAG功能我得到這個結果:

part val val_lag1 
1 3.0 NULL 
2 4.0 3.0 
3 5.0 4.0 
5 6.0 5.0 

我知道它可以通過連接表本身完成。但我想知道:是否有可能通過LAG獲得相同的結果?

這是我用來獲取例子腳本:

SELECT 1 part, 3.0 val 
INTO #t 

INSERT INTO #t VALUES 
(2, 4.0), 
(3, 5.0), 
(5, 6.0) 

SELECT 
    *, 
    LAG(t.val, 1) OVER(ORDER BY t.part) val_lag1 
FROM #t t 

SELECT 
    t.*, 
    tt.val val_lag1 
FROM #t t 
LEFT JOIN #t tt ON t.part = tt.part + 1 

DROP TABLE #t 

回答

0

試試這個:

SELECT 1 part, 3.0 val 
INTO #t 

INSERT INTO #t VALUES 
(2, 4.0), 
(3, 5.0), 
(5, 6.0) 

SELECT 
    *, 
    CASE WHEN t.part-LAG(t.part, 1) OVER(ORDER BY t.part)=1 
     THEN LAG(t.val, 1) OVER(ORDER BY t.part) 
     ELSE NULL 
    END AS val_lag1 
FROM #t t 

DROP TABLE #t 
+0

謝謝你很多。 – Holden263

相關問題