根据更新的时间删除重复记录

时间:2009-09-24 05:22:05

标签: sql-server database

DocID |更新日期|可采用DocName

8245376 | 8/26/2009 1:07:01 PM |文档1
8245376 | 8/26/2009 4:07:04 PM |文档1
8245376 | 8/26/2009 7:07:01 PM |文档2
8245376 | 8/26/2009 2:07:03 PM |文档2
646681 | 8/26/2009 1:07:01 PM |文档3
263272 | 8/26/2009 1:07:01 PM |文档4
8245376 | 8/26/2009 1:07:01 PM | Doc5
8245376 | 8/26/2009 2:07:10 PM | Doc5
8245376 | 8/26/2009 1:07:01 PM |文档6
8245376 | 8/26/2009 10:07:01 PM |文档6
1903875 | 8/26/2009 1:07:01 PM | Doc7

从上面的记录集中,如何根据更新的日期检索唯一的行,即检索最近更新的记录?

感谢, 格塔

3 个答案:

答案 0 :(得分:2)

select * from table t1 join(select docid,max(dateupdated)as dateupdated from table group by docid)t2 on t1.docid = t2.docid and t1.dateupdated = t2.dateudated

答案 1 :(得分:0)

这假设您只想保留每个DocId最近更新的内容。我正在使用SQL Server DELETE语句,但我必须通过连接相关字段来作弊,以便我可以使用WHERE NOT IN子句。还有其他方法,但这很简洁。

DELETE
FROM Docs
WHERE CAST(DocId AS VARCHAR) + '_' + 
      CAST(Date_Updated AS VARCHAR) NOT IN 
(
  SELECT CAST(DocId AS VARCHAR) + '_' + 
         CAST(MAX(Date_Updated) AS VARCHAR)
  From Docs
  GROUP BY DocId
)

答案 2 :(得分:0)

select distinct DocID, max("Date Updated") from mytable group by DocID