当状态列发生任何更改时,如何从SQL查询返回结果?
我对编写复杂的查询还是新手。如果有人能给我任何解决这个问题的办法,我会很有帮助的 我有一组记录,当状态发生变化时,我希望它返回日期和状态当状态列发生任何更改时,如何从SQL查询返回结果?,sql,sql-server,Sql,Sql Server,我对编写复杂的查询还是新手。如果有人能给我任何解决这个问题的办法,我会很有帮助的 我有一组记录,当状态发生变化时,我希望它返回日期和状态 提前感谢。在SQL Server 2012+中,使用: 请回顾并感谢@sqlzim,我会了解的,这是我第一次来这里,你能解释一下吗function@Khalil根据我答案中链接的文档,lag():如果我想使用lag,我真的不明白。另外,如果我想添加'order by[Time]desc',是否有可能?@MuhammadAkmal是的,它将与order by[
提前感谢。在SQL Server 2012+中,使用:
请回顾并感谢@sqlzim,我会了解的,这是我第一次来这里,你能解释一下吗function@Khalil根据我答案中链接的文档,
lag()
:如果我想使用lag,我真的不明白。另外,如果我想添加'order by[Time]desc',是否有可能?@MuhammadAkmal是的,它将与order by[Time]desc
一起工作如果你对date
和Time
有单独的列,那么你可以使用升序或降序,比如(order by[date]desc,[Time]desc)
或(order by[date],[时间]
。嘿,谢谢你,那会有用的!我要去看看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
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