2013-03-28 65 views
2

我有一个数据库表,它是从不同的来源自动填充。现在我遇到了一些重复条目的问题。如何删除MS SQL数据库中的部分重复项?

例如:

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 

回答

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

+0

非常感谢您这解决了我的问题 – 2013-03-28 08:57:55