检测表中后续行的更改

时间:2014-03-11 17:55:33

标签: sql sql-server database

我有一个表,其中有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

等等。

1 个答案:

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