Sql 检测表中后续行中的更改
我有一个表,其中有两列,一列是时间戳,另一列是值字段。值字段可以随时间变化。表格中的条目每分钟输入一次Sql 检测表中后续行中的更改,sql,sql-server,database,Sql,Sql Server,Database,我有一个表,其中有两列,一列是时间戳,另一列是值字段。值字段可以随时间变化。表格中的条目每分钟输入一次 TimeStamp Value 1 0 2 0 3 0 4 0 5 2 6 6 7 6 8 7 我想检测值发生变化的行。我需要将结果集返回为 5
TimeStamp Value
1 0
2 0
3 0
4 0
5 2
6 6
7 6
8 7
我想检测值发生变化的行。我需要将结果集返回为
5 2
6 6
8 7
依此类推。您可以通过查找上一个值来完成此操作。下面是一个使用相关子查询的方法:
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;
可以使用游标来完成吗?因为数据库中的数据将按时间戳排序,所以我们可以不使用游标来比较两行吗?您可以。通常,如果出于性能和维护原因,可以使用单个查询来实现相同的目的,则希望避免使用游标。
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;