在SQL Server表中查找重复项

时间:2015-06-11 15:19:23

标签: sql-server-2008 duplicates

不知何故,我的表中有重复的条目。数据结构的设置如下:

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 个答案:

答案 0 :(得分: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 :(得分:1)

首先,您需要找到重复的记录并将其删除,每个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 constraintunique index,这样Sql Server就会阻止您输入重复的数据。