正在尝试查找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;