当状态列中的任何更改时,如何从SQL查询返回结果?

时间:2017-09-03 13:01:41

标签: sql sql-server

我仍然是编写复杂查询的新手。如果有人能给我任何解决方案,将会很有帮助。

我有一组记录,当状态改变时,我会返回日期和状态。

https://i.stack.imgur.com/xLUga.png

提前致谢。

1 个答案:

答案 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