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

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

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

🥇1、ROW_NUMBER函数

假设我们有如下数据表:

此时我们可以使用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

🥈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
);

执行删除:

删除后的:

到此这篇关于SqlServer中根据某几列获取重复的数据将其删除并保留最新一条的文章就介绍到这了,更多相关SqlServer获取重复的数据内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mssql/11228.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部