在 SQL 服务器 Table 中查找重复项

Find Duplicates in SQL Server Table

不知何故,我的 table 中有重复的条目。数据结构是这样设置的:

RecordID, UserID, clockin, clockout

因此,如果一个用户有 2 个条目具有相同的 clockin/clockout 时间,则它是重复的。副本看起来像这样。 entry应该只存在一次,clockin & clockout时间完全一样

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

首先,您需要找到重复的记录并删除它们,UserIdclockinclockout值的每个组合只留下一条记录。

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
)

那么你应该在这 3 列的组合上设置一个 unique constraint or unique index,这样 Sql 服务器将阻止你输入重复的数据。

具有row_numberwindow功能:

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