我有一个包含60k记录的表,我需要找到基于列Crime ID
的重复记录,到目前为止我发现了这个:
SELECT * FROM crimedata GROUP BY `Crime ID` HAVING COUNT(`Crime ID`) > 1
此查询返回特定Crime ID
发生的次数。由于大多数Crime ID
出现了两次,但是我还有10k的记录,其中Crime ID
为空(非空)并且该查询无法区分。我需要一个返回每个Crime ID
重复的查询,并将其中一个作为唯一的第一个。
Crime ID | column2 | column3 |
------------------------------
abc a b 1
abc a a 2
a b b 3
b b b 4
a a a 5
b a a 6
abc b a 7
从此示例中,查询将返回2,5,6,7记录。
答案 0 :(得分:0)
你需要检查null,然后它会给你想要的输出。下面的查询是在MSSQL上测试的。
您使用的是哪个数据库?如果您理解这一点,那么更改它,以便它在您的服务器上工作,否则告诉我们。
我尝试将查询转换为MySQL,请检查。
SELECT `Crime ID` ,COUNT(NULLIF(`Crime ID`,'')) FROM crimedata GROUP BY `Crime ID` HAVING COUNT(NULLIF(`Crime ID`,'')) > 1
答案 1 :(得分:0)
您可以使用排名。
SELECT* from (
SELECT `Crime ID`, `column 2`, `column 3`, Rank() over (partition by CrimeID order by `Crime ID`) as myrank
FROM crimedata
) rankedlist
WHERE myrank = 1
如果要选择重复记录并忽略原件,可以选择WHERE myrank > 1
如果您按照有意义的事情订购,例如提交日期(如果您跟踪它),您将能够选择其他人之前的条目。
如果这是您的意图,选择重复记录将允许您汇总来自它们的数据并将它们合并到原始记录中。
答案 2 :(得分:0)
我已经找到了如何得到我想要的东西。
SELECT *
FROM
table
GROUP BY
`column1`,
`column2`,
`column3`,
HAVING COUNT(`column1`) > 1
AND COUNT(`column2`) > 1
AND COUNT(`column3`) > 1
这将返回在数据库中出现多次的每条记录。