Предполагая, что вы можете использовать lag()
:
with data as (
select *, lag(Price) over (order by OrderId) as lastPrice
from T
)
select *
from data
where coalesce(Price, -1) <> lastPrice;
В противном случае, при условии, что вы можете использовать cross apply
:
select t.*
from T t cross apply (
select max(OrderId) priorOrderId from T t2 where t2.OrderId < t.OrderId
) left outer join T t3 on t3.OrderId = t2.priorOrderId
where coalesce(t3.Price, -1) <> t.Price;
Что еще можно переписать:
with data as (
select *, (select max(OrderID from T t2 where t2.OrderId < t.OrderId) as priorOrderId
from T t
)
select d.*
from data d left outer join T t on t.OrderId = d.priorOrderId
where coalesce(t.Price, -1) <> d.Price;