如果order子句中的当前值与以前的特定值不同,则获取前一个行值?
问题描述:
数据的例子:如果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
答
试试这个:
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
谢谢你很多。 – Holden263