Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检测表中后续行中的更改_Sql_Sql Server_Database - Fatal编程技术网

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;