如何在SQL中删除重复记录?

如何在SQL中删除重复记录?,sql,sql-server,Sql,Sql Server,这是我的原始表格: 预定表格: 我无法向表中添加新列 您可以使用行号删除重复项: 数字大于1的每一行都是重复的。可以使用公共表表达式删除一组重复项中除第一条记录外的所有记录: with cte as ( select *, row_number() over (partition by FirstName, LastName, Age order by FirstName, LastName, Age) as row_number from tbl ) delete f

这是我的原始表格:

预定表格:


我无法向表中添加新列

您可以使用行号删除重复项:


数字大于1的每一行都是重复的。

可以使用公共表表达式删除一组重复项中除第一条记录外的所有记录:

with cte as (
    select *, row_number()
     over (partition by FirstName, LastName, Age order by FirstName, LastName, Age) as row_number
    from tbl
)
delete from cte where row_number <> 1

您需要一些在没有PK的情况下识别行的方法

我能想到的唯一方法是:

检索行的行ID, 然后为每个非唯一行选择一个作为好的, 最后删除所有其他的。
不过,我对这个解决方案并不乐观。我认为这有助于生成独特的行ID。我希望这会有所帮助。

如何确定哪些是好的,哪些是坏的?我认为这里的主要问题源于缺少主键。SQL Server问题需要显示一个尝试小心,您也没有按年龄进行分区,这是删除真正重复项所需的
with cte as (
    select *, row_number()
     over (partition by FirstName, LastName, Age order by FirstName, LastName, Age) as row_number
    from tbl
)
delete from cte where row_number <> 1