当前位置: 代码网 > it编程>数据库>MsSqlserver > SqlServer中根据某几列获取重复的数据将其删除并保留最新一条

SqlServer中根据某几列获取重复的数据将其删除并保留最新一条

2024年05月16日 MsSqlserver 我要评论
有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除。 1、ROW_NUMBER函数 假设我们有如下数据表: 此时我们可以使用ROW_NUMBER函数,根据某几列查询出重复数据的新的排序列,该排序列就是根据某几 ...

有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除。

🥇1、row_number函数

假设我们有如下数据表:
image

此时我们可以使用row_number函数,根据某几列查询出重复数据的新的排序列,该排序列就是根据某几列重复数据生成的序号(从1开始),如下所示orderno就是我们新生成的列:

--根据name和age这2个字段进行查询并获得新的列orderno(orderno就是根据name和age重复数据生成的序号,从1开始),同时按照createtime降序排列
select *,orderno=row_number() over(partition by [name],age order by createtime desc) 
from dbo.testtb

image


🥈2、删除数据

有了上述代码中的排序列,我们就可以知道,orderno的值>1的数据行都是我们需要删除的数据,完整代码如下所示:

--删除表testtb中字段name和age同时重复的数据,并保留最新一条
delete from dbo.testtb where id in(
    --根据name和age这2个字段查询出重复的数据
    select id from
    (
		--根据name和age这2个字段进行查询并获得新的列orderno(orderno就是根据name和age重复数据生成的序号,从1开始),同时按照createtime降序排列
		select *,orderno=row_number() over(partition by [name],age order by createtime desc) 
		from dbo.testtb
    ) tmp
    where orderno>1
);

执行删除:
image

删除后的:
image

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com