2013-03-28 4 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 

Как вы можете видеть, есть две строки, в которых ВИЗ и TID являются одинаковыми. Я пытаюсь добиться того, что одна строка, где дата выше, удаляется. Единственным обходным решением, которое я нашел, является запрос, в котором выбраны только нижние.

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

ответ

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 

DEMO

+0

Большое спасибо это решить мою проблему –

Смежные вопросы