SQL Server重复检查

时间:2020-03-05 18:48:31  来源:igfitidea点击:

确定SQL Server表中重复记录的最佳方法是什么?

例如,我要查找表中收到的最后一封重复的电子邮件(该表具有主键,receiveddate和email字段)。

样本数据:

1  01/01/2008 [email protected]
2  02/01/2008 [email protected]
3  01/12/2008 [email protected]

解决方案

回答

我们是否不能加入电子邮件字段中的列表,然后查看结果中的空值是多少?

还是更好,算一下每个电子邮件地址的实例?并且只返回计数> 1的那些

甚至可以选择电子邮件和ID字段。并返回电子邮件相同且ID不同的条目。 (为避免重复,请勿使用!=,而应使用<或者>。)

回答

像这样的东西

select email ,max(receiveddate) as MaxDate
from YourTable
group by email 
having count(email) > 1

回答

试试这个

select * from table a, table b
where a.email = b.email

回答

SELECT [id], [receivedate], [email]
FROM [mytable]
WHERE [email] IN ( SELECT [email]
    FROM [myTable]
    GROUP BY [email]
    HAVING COUNT([email]) > 1 )

回答

我们是否需要最后一件物品的清单?如果是这样,我们可以使用:

SELECT [info] FROM [table] t WHERE NOT EXISTS (SELECT * FROM [table] tCheck WHERE t.date > tCheck.date)

如果要列出所有重复的电子邮件地址,请使用GROUP BY收集相似的数据,然后使用HAVING子句确保数量大于1:

SELECT [info] FROM [table] GROUP BY [email] HAVING Count(*) > 1 DESC

如果要最后一封重复的电子邮件(单个结果),只需添加" TOP 1"和" ORDER BY":

SELECT TOP 1 [info] FROM [table] GROUP BY [email] HAVING Count(*) > 1 ORDER BY Date DESC

回答

如果我们具有代理键,则使用SQLMenance帖子中提到的语法进行分组相对容易。本质上,将使两行或者更多行"相同"的所有字段分组。

删除重复记录的示例伪代码。

Create table people (ID(PK), Name, Address, DOB)

Delete from people where id not in (
Select min(ID) from people group by name, address, dob
)