Если у вас нет функции LAG
, вы можете использовать ROW_NUMBER()
для генерации ранжирования категорий по day
, затем INNER JOIN
по предыдущей записи.
;WITH RowNumberByCategory AS
(
SELECT
T.day,
T.cat,
T.x1,
T.x2,
RowNumberByCategory = ROW_NUMBER() OVER (PARTITION BY T.cat ORDER BY T.day ASC)
FROM
YourTable AS T
)
SELECT
T.*
FROM
RowNumberByCategory AS T
INNER JOIN RowNumberByCategory AS N ON
T.cat = N.cat AND
T.RowNumberByCategory - 1 = N.RowNumberByCategory
WHERE
T.x1 <> N.x1 OR T.x2 <> N.x2
Обязательно сверяйте значения NULL
с ISNULL
на WHERE
, если ваши столбцы x1
или x2
могут быть NULL
.