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

 更新时间:2024年04月28日 14:48:02   作者:Qubernet  
有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除,这篇文章主要介绍了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获取重复的数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Sql Server触发器的使用

    Sql Server触发器的使用

    触发器是一种特殊的存储过程,不能被显式调用,只能在对表进行insert、update、delete操作时被自动激活。所以触发器可以用来实现对表进行复杂的完整性约束
    2012-12-12
  • Row_number()函数用法小结

    Row_number()函数用法小结

    Row_number()函数是SQL SERVER系统函数中的一种,本文主要介绍了Row_number()函数用法小结,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-05-05
  • Sqlserver之死锁查询以及批量解锁的实现方法

    Sqlserver之死锁查询以及批量解锁的实现方法

    这篇文章主要介绍了Sqlserver之死锁查询以及批量解锁的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • sqlserver中查找所有包含了某个文本的存储过程

    sqlserver中查找所有包含了某个文本的存储过程

    我想查找所有使用了sp_a 的存储过程。右击sp_a->view dependencies-> 选择 view objects that depend on [sp_a] 你会发现,有时候结果不能够全部列出来,不能够找到所有使用了sp_a的其他存储过程。
    2010-05-05
  • SQL语法 分隔符理解小结

    SQL语法 分隔符理解小结

    单引号和双引号之间的区别最早在SQL92标准中引入的。对于标识符,这个标准区分了常规标识符和分隔的标识符。
    2009-10-10
  • SQL SERVER2012中新增函数之字符串函数CONCAT详解

    SQL SERVER2012中新增函数之字符串函数CONCAT详解

    SQL Server 2012有一个新函数,就是CONCAT函数,连接字符串非它莫属。比如在它出现之前,连接字符串是使用"+"来连接,如遇上NULL,还得设置参数与配置,不然连接出来的结果将会是一个NULL。本文就介绍了关于SQL SERVER 2012中CONCAT函数的相关资料,需要的朋友可以参考。
    2017-03-03
  • SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解

    这篇文章主要给大家介绍了关于SQL Server中通用数据库角色权限处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • SQL Server 2008 R2完美卸载教程(亲测有用)

    SQL Server 2008 R2完美卸载教程(亲测有用)

    SQL Server 2008 R2是一款非常强大的数据库管理系统,但在某些情况下可能需要卸载它,下面这篇文章主要给大家介绍了关于SQL Server 2008 R2完美卸载的相关资料,需要的朋友可以参考下
    2023-11-11
  • SQL 使用 VALUES 生成带数据的临时表实例代码详解

    SQL 使用 VALUES 生成带数据的临时表实例代码详解

    这篇文章主要介绍了SQL 使用 VALUES 生成带数据的临时表,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2007-09-09
  • 验证SQL保留字

    验证SQL保留字

    验证SQL保留字...
    2006-07-07

最新评论