我有一个表,其中有2列,一个是时间戳,另一个是值字段。值字段可以随时间变化。表格中的条目每分钟输入一次。
TimeStamp Value
1 0
2 0
3 0
4 0
5 2
6 6
7 6
8 7
我想检测值更改的行。我需要和SQL将结果集返回为
5 2
6 6
8 7
等等。
答案 0 :(得分:0)
您可以通过查找以前的值来执行此操作。这是一个使用相关子查询的方法:
select t.timestamp, t.value
from (select t.*,
(select top 1 t2.value
from table t2
where t2.timestamp < t.timestamp
order by t2.timestamp desc
) as prevvalue
from table t
) t
where prevvalue is null or prevvalue <> value;
如果您使用的是SQL Server 2012,则可以使用lag()
更轻松地执行此操作:
select t.timestamp, t.value
from (select t.*,
lag(value) over (order by timestamp desc) as prevvalue
from table t
) t
where prevvalue is null or prevvalue <> value;