我有一个Content在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与之前的版本相比,该表中的行已更新。结果应如下所示:
FileID
ContentID UpdatedAt FileID 1 2014-02-02 00:00:00 File-B 2 2012-12-31 00:00:00 File-Y
到目前为止我尝试过的是:
在SQL Server 2012中,您只需使用即可lag()。您可以在SQL Server 2008中以各种方式复制它。这是一种使用方法cross apply:
lag()
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;