有一个结构如下的表:
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
所以,请帮助我解决你的想法。
答案 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
答案 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。为小提琴)