正在尝试查找SQL Server中某个值上次更改的时间

正在尝试查找SQL Server中某个值上次更改的时间,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个文档表格: | ID| DOC_ID | Count| 1 22 1 2 22 1 3 22 2 4 22 2 5 22 2 6 22 3 我是否可以编写一个SQL查询,只返回发生计数更改的最新行?我正在使用SQL Server 期望输出: ID DOC_

我有一个
文档
表格:

| ID|   DOC_ID     | Count|
  1       22           1
  2       22           1
  3       22           2
  4       22           2
  5       22           2
  6       22           3
我是否可以编写一个SQL查询,只返回发生计数更改的最新行?我正在使用SQL Server

期望输出:

ID    DOC_ID   Count
---------------------
6       22      3

在SQL Server 2012+中,您只需使用
lag()

此版本不需要子查询。我只是把它放在那里,以便您可以看到这两个查询之间的关系。这同样有效:

select t.*
from t cross apply
     (select top (1) tprev.*
      from t tprev
      where tprev.doc_id = t.doc_id and tprev.id < t.id
      order by tprev.id desc
     ) tprev
where tprev.count <> t.count;

在许多情况下,这将比
apply
版本快(尽管
lag()
通常性能最好)。

感谢您的快速响应suggestion@Jeswanth . . . 作为OP,你可以接受任何你喜欢的答案。但你不接受这个答案有什么原因吗?
select t.*
from (select t.*, tprev.count as prev_count
      from t cross apply
           (select top (1) tprev.*
            from t tprev
            where tprev.doc_id = t.doc_id and tprev.id < t.id
            order by tprev.id desc
           ) tprev
     ) t
where prev_count <> count;
select t.*
from t cross apply
     (select top (1) tprev.*
      from t tprev
      where tprev.doc_id = t.doc_id and tprev.id < t.id
      order by tprev.id desc
     ) tprev
where tprev.count <> t.count;
select doc_id, count, min(id) as min(id)
from t
group by doc_id, count;