检测重复并删除它们

时间:2018-01-24 19:16:24

标签: sql-server tsql duplicates

我一直在努力解决我的数据库中的一个问题,这个问题很常见,但到目前为止我找不到解决方案,我希望你能帮我解决这个问题。

我有一个包含人员及其相关地址的数据库。我的主要目标是找出那里有多少独特的家庭。例如,我想把一个家庭算作一个家庭。到目前为止,运行查询以显示last_names和多个地址:

select  Last_Name ,add_line1, count(*)  from ##all_people 
  group by  Last_Name,ADD_LINE1
  having count(*) > 1

这向我显示了具有相同last_name和地址的人,但我需要他们的ID才能将其从我的临时表中删除。

此外,我想询问如何只为每个家庭显示一条记录。

这是我的诱惑结构:

ID      First_name   Last_Name    add_line1

非常感谢你的帮助!!!

2 个答案:

答案 0 :(得分:1)

要查找重复项,您可以使用Count()Over()并通过所需的分组进行分区。

        driver_options.add_argument("headless")

要查找要删除的内容,可以使用Row_Number()

select * from (
select Id, Last_Name ,add_line1, count(*) over (partition by Last_Name, add_line1) dupe_count  from ##all_people 
) t
where t.dupe_count > 1

使用select * from ( select Id, Last_Name ,add_line1, row_number() over (partition by Last_Name, add_line1 order by ID) extras from ##all_people ) t where t.extras > 1 查看每个分组一行

答案 1 :(得分:1)

你似乎在这里有很多问题......

  

我的主要目标是找出那里有多少独特的家庭。

您可以使用不同的计数来执行此操作:

SELECT COUNT(DISTINCT Last_Name + add_line1)
FROM ##all_people
  

...但我需要他们的ID才能将它们从我的诱惑中移除

我认为这是通过新的计数查询来解决的。

  

此外,我想问一下如何只为每个家庭显示一条记录。

只需使用不同的姓氏和地址:

SELECT DISTINCT last_name, add_line1
FROM ##all_people