2

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

例如:

  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 
4

1 回答 1

3

您可以使用 aCTEROW_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

演示

于 2013-03-28T08:48:16.450 回答