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获取重复的数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • sqlserver 临时表的用法

    sqlserver 临时表的用法

    用于复杂查询时可以用临时表来暂存相关记录,能够提高效率、提高程序的可读性,类似于游标中的my_cursor declare my_cursor cursor scroll
    2010-11-11
  • SqlServer 扩展属性的介绍

    SqlServer 扩展属性的介绍

    SqlServer 扩展属性的介绍,需要的朋友可以参考一下
    2013-03-03
  • 深入分析MSSQL数据库中事务隔离级别和锁机制

    深入分析MSSQL数据库中事务隔离级别和锁机制

    事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。
    2014-08-08
  • 深入浅析SQL Server 触发器

    深入浅析SQL Server 触发器

    触发器是一种特殊的存储过程,触发器是通过事件触发可以自动调用执行的。在sql2005中,触发器可以分为dml触发器和ddl触发器。下面通过本篇文章给大家深入浅析sqlserver触发器,需要的朋友可以参考下
    2015-10-10
  • 如何创建支持FILESTREAM的数据库示例探讨

    如何创建支持FILESTREAM的数据库示例探讨

    FILESTREAM使用一种特殊类型的文件组,因此在创建数据库时,必须至少为一个文件组指定 CONTAINS FILESTREAM 子句接下来为你详细介绍下如何创建支持 FILESTREAM 的数据库
    2013-03-03
  • sql语法中的concat()函数详解

    sql语法中的concat()函数详解

    SQL CONCAT 函数添加两个或多个字符或字符串以在结果中形成一个新字符串,这篇文章主要介绍了sql concat()函数,需要的朋友可以参考下
    2022-08-08
  • 数据库 日期加减处理

    数据库 日期加减处理

    对于日期指定部分的加减,使用DATEADD函数就可以轻松实现。
    2009-07-07
  • sqlserver数据库移动数据库路径的脚本示例

    sqlserver数据库移动数据库路径的脚本示例

    前段时间做过这么一件事情,把原本放在c盘的所有数据库(除了sql server系统文件外)文件Move到D盘,主要是为了方便后续管理以及减少磁盘I/O阻塞(C,D是2个独立磁盘)。脚本需输入2个参数:目标数据库名字和目标目录
    2013-12-12
  • SQL中不停机扩容实现的几种方法

    SQL中不停机扩容实现的几种方法

    不停机扩容是一种在不影响系统正常运行的情况下,动态增加资源以提升系统性能和容量的方法,下面就来介绍一下几种常见的方法,感兴趣的可以了解一下
    2025-04-04
  • SqlServer 英文单词全字匹配详解及实现代码

    SqlServer 英文单词全字匹配详解及实现代码

    这篇文章主要介绍了SqlServer 英文单词全字匹配的相关资料,并附实例,有需要的小伙伴可以参考下
    2016-09-09

最新评论