答案 0 :(得分:3)
在SQL Server 2012+中,使用lag()
:
select s.[date],s.[status]
from (
select [date],[status],lag([status]) over (order by date) as prev_status
from tbl
) s
where s.[status]<>s.prev_status
or s.prev_status is null
在SQL Server 2012+之前,使用outer apply()
:
select t.[date],t.[status]
from tbl as t
outer apply (
select top 1 i.[status] as prev_status
from tbl as i
where i.[date] < t.[date]
order by i.[date] desc
) s
where t.[status]<>s.prev_status
or s.prev_status is null