0

有一个具有以下结构的表:

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

所以,请帮我谈谈你的想法。

4

2 回答 2

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 演示

于 2013-09-17T07:42:55.810 回答
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 小提琴演示(感谢@Ic。为小提琴)

于 2013-09-17T07:54:06.007 回答