gpt4 book ai didi

sql - 检测列中的变化

转载 作者:行者123 更新时间:2023-12-02 07:30:10 25 4
gpt4 key购买 nike

假设我有一个包含 2 列的表:版本、值和条目:


+------------+--------+
|修订 |值(value) |
+------------+--------+
| 1 |约翰 |
| 2 |约翰 |
| 3 |詹姆斯 |
| 4 |詹姆斯 |
| 5 |约翰 |
+------------+--------+

该表将用于跟踪某个值的变化

我想获取值更改时的修订号。所以对于上表,它将是 1、3 和 5。

我尝试使用 order by 但当值从 James 变回 John 时,这会错过第二次出现

最佳答案

SQL-Server 2012+,使用LAG()函数:

; WITH cte AS
( SELECT Revision, Value,
PreviousValue = LAG(Value) OVER (ORDER BY Revision)
FROM tableX
)
SELECT Revision, Value
FROM cte
WHERE Previousvalue <> Value
OR PreviousValue IS NULL ;

SQL-Server 2005+,使用窗口函数:

; WITH cte AS
( SELECT Revision, Value,
Rn = ROW_NUMBER() OVER (ORDER BY Revision),
Ln = ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Revision)
FROM tableX
)
SELECT Revision = MIN(Revision),
Value
FROM cte
GROUP BY Value, (Rn-Ln) ;

SQL-Fiddle.com 测试

请注意,这两个查询都不依赖于 Revision 数字是连续的(甚至是数字!)。如果您的数字没有差距,GoatCO 的回答也很好。

关于sql - 检测列中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com