2016-10-18 2 views
-1

Не могли бы вы помочь мне решить эту проблему с дублированием?Удаление дублирующейся записи в SQL

У меня есть столбцы в таблице, как показано ниже;

**Date_time**   **Pro**    **Color** 
2016-10-17    Basketball    Red 
2016-10-17    Basketball    Red 
2016-10-18    Hockey     Silver 
2016-10-18    Hockey     Silver 

Мне нужно удалить дублированные записи и в конечном итоге иметь;

**Date_time**   **Pro**    **Color** 
2016-10-17  Basketball    Red 
2016-10-18  Hockey     Silver 

Я использовал этот код, чтобы получить то, что хочу, но я не был успешным при попытке.

DELETE FROM Sport WHERE date_time NOT IN (SELECT MIN(date_time) 
    FROM sport GROUP BY date_time,pro,color) 

Большое спасибо.

+2

Отметьте свой вопрос в базе данных, которую вы используете. Также объясните, что означает «не успех». –

+0

Возможный дубликат [Как удалить повторяющиеся строки?] (Http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows) – wazelin

ответ

0

Предположительно, вы собираетесь что-то вроде этого:

DELETE FROM Sport 
    WHERE s.date_time > (SELECT MIN(s2.date_time) 
         FROM sport s2 
         WHERE s2.pro = sport.pro and s2.color = sport.color 
         ); 

В самом деле, если у вас есть несколько дублирующих записей, то выше удаляет только один из них. Попробуйте что-нибудь подобное вместо этого:

DELETE FROM Sport 
    WHERE s.date_time = (SELECT MAX(s2.date_time) 
         FROM sport s2 
         WHERE s2.pro = sport.pro and s2.color = sport.color 
         ); 
+0

Msg 102, уровень 15, состояние 1, строка 1 Неверный синтаксис рядом с 's'. – Chelsea

+0

Большинство баз данных принимают этот синтаксис. Вы действительно должны пометить вопрос с помощью базы данных, которую используете. –

0
WITH numbered AS (
    SELECT ROW_NUMBER() OVER(PARTITION BY [dupe-column-list] ORDER BY [dupe-column-list]) AS _dupe_num 
    FROM [table-name] 
    WHERE 1=1 -- any where clause if required 
) 
DELETE FROM numbered WHERE _dupe_num > 1; 

выше запрос будет использовать ROW_NUMBER() только сохранить первое появление каждой записи. В вашем случае [dupe-column-list] должен включать все ваши столбцы.