2013-09-17 4 views
0

Там есть таблица ниже структур:Сравнить предыдущее значение столбца в SQL Server

 
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 оно имеет ch anged от 1 до 1.

Итак, мне нужно написать запрос, который будет извлекать

 
ID XID RChange 
4 1  0 
5 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

0

Это еще один подход: (. Спасибо @Ic для скрипки)

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

Смежные вопросы