数据示例:
part val
1 3.0
2 4.0
3 5.0
5 6.0
如果当前值列“part”大于之前的1,我需要从列“val”获取前一行。
所需结果的示例:
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 :(得分: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