比较SQL Server中的先前列值

时间:2013-09-17 07:38:11

标签: sql-server sql-server-2008

有一个结构如下的表:

ID  XID   RChange 
1    1     1
2    2     1
3    3     1
4    1     0
5    2     0
6    3     1

ID列是标识列 XID列将重复一些值 RChange将有1或0

我需要表中的那些行,RChange列值从1变为0,具有相同的XID

即。在上表中,对于XID 1和2,RChange值已从1更改为0,但对于XID 3,它已从1更改为1.

所以,我需要编写一个将检索

的查询
ID XID  RChange
4   1     0
5   2     0

所以,请帮助我解决你的想法。

2 个答案:

答案 0 :(得分:2)

您尚未添加时间戳,因此我假设ID列将确定订单。

;WITH byXID AS
(
    SELECT ID, XID, RChange, ROW_NUMBER() OVER(PARTITION BY XID ORDER BY ID) rn
    FROM Table1
)
SELECT t1.ID, t1.XID, t1.RChange
FROM byXID t1
INNER JOIN byXID t0 ON t1.XID = t0.XID AND t0.rn = t1.rn - 1
WHERE t1.RChange = 0 AND t0.RChange = 1

SQL Fiddle demo

答案 1 :(得分:0)

这是另一种方法:

SELECT t2.ID, t2.XID, t2.RChange
FROM Table1 t1 JOIN Table1 t2
        ON t1.XID = t2.XID
WHERE t1.RChange = 1 AND t2.RChange = 0

Sql fiddle demo (感谢@Ic。为小提琴)