我在MSSQL中有一个名为Content
的简化表:
ContentID UpdatedAt FileID
1 2014-01-01 00:00:00 File-A
1 2014-02-02 00:00:00 File-B
1 2014-03-03 00:00:00 File-B
2 2012-12-30 00:00:00 File-X
2 2012-12-31 00:00:00 File-Y
我想要实现的目标如下:
获取表Content
中的每一行,其中FileID
已更新,与之前的版本相比较。结果应如下:
ContentID UpdatedAt FileID
1 2014-02-02 00:00:00 File-B
2 2012-12-31 00:00:00 File-Y
到目前为止我尝试过:
答案 0 :(得分:2)
在SQL Server 2012中,您只需使用lag()
。您可以在SQL Server 2008中以各种方式复制它。以下是使用cross apply
的方法:
select c.*
from content c cross apply
(select top 1 c2.*
from content c2
where c2.contentId = c.contentId and c2.UpdatedAt < c.UpdatedAt
order by c2.UpdatedAt desc
) cprev
where c.FileId <> cprev.FileId;