如何删除MS SQL数据库中的部分重复项?

时间:2013-03-28 08:45:55

标签: sql tsql

我有一个数据库表,可以从不同的来源自动填充。现在我遇到了一些重复条目的问题。

例如:

  EID  |  TID  |  StartDate  |  EndDate
--------------------------------------------
  1    |  1    |  20.01.2012 |  23.01.2012   
  1    |  2    |  25.01.2012 |  26.01.2012
  1    |  3    |  27.01.2012 |  30.01.2012
  2    |  2    |  20.02.2012 |  23.02.2012
  2    |  2    |  25.01.2012 |  26.01.2012
  3    |  1    |  20.01.2012 |  23.01.2012

如您所见,有两行EID和TID相同。我想要实现的是,删除日期较高的那一行。 我找到的唯一解决方法是查询,其中只选择较低的解决方案。

SELECT EID, TID, Min(StartDate), Min(EndDate) FROM Table1 GROUP BY EID, TID 

1 个答案:

答案 0 :(得分:3)

您可以使用CTEROW_NUMBER功能:

WITH CTE AS
(
   SELECT EID, TID, StartDate, EndDate,
      RN = ROW_NUMBER() OVER (PARTITION BY  EID, TID ORDER BY StartDate, EndDate)
   FROM Table1 
)
DELETE FROM CTE WHERE RN > 1

DEMO