2015-06-11 4 views
1

Как-то в моей таблице есть повторяющиеся записи. Структура данных настройки следующим образом:Найти дубликаты в таблице SQL Server

RecordID, UserID, clockin, clockout 

Таким образом, если один пользователь имеет 2 записей с одинаковым clockin/clockout времени, то это является дубликатом. Дубликат будет выглядеть так. Запись должна существовать только один раз, а время clockin & clock - это точно то же самое.

RecordID UserID clockin    clockout 
1   16  2015-01-12 07:15:23 2015-01-12 08:55:15 
2   16  2015-01-12 07:15:23 2015-01-12 08:55:15 
3   44  2014-12-18 08:02:36 2014-12-18 04:02:36 
4   44  2014-12-18 08:02:36 2014-12-18 04:02:36 

ответ

2

С функцией row_number окна:

with cte as(select *, row_number() over(partition by UserID, clockin, clockout 
             order by RecordID) as rn from TableName) 
delete from cte where rn > 1 
1

Во-первых, вам нужно найти дублированные записи и удалить их, оставив только одну запись для каждой комбинации UserId, clockin, clockout значения.

DELETE 
FROM MyTable 
WHERE RecordId IN(
    SELECT t1.RecordId 
    FROM MyTable t1 
    INNER JOIN MyTable t2 ON(t1.UserId = t2.UserId 
         AND t1.clockin = t2.clockin 
         AND t1.clockout = t2.clockout) 
    WHERE t1.RecordId < t2.RecordId 
) 

Затем вы должны создать unique constraint или unique index на комбинации этих 3-х колонок, так что Sql Server помешает вам войти дублированные данные.

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