我有一个数据库表,可以从不同的来源自动填充。现在我遇到了一些重复条目的问题。
例如:
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
答案 0 :(得分:3)
您可以使用CTE
和ROW_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