SQL Server CTE删除重复数据的实现方法

SQL Server使用CTE与ROW_NUMBER()窗口函数删除重复数据,通过PARTITION BY按重复列分组,标记行号并删除rn>1的记录,保留每组第一条,实现数据去重,本文给大家介绍sqlserver CTE删除重复数据的实现方法,感兴趣的朋友一起看看吧。

SQL Server CTE删除重复数据

实现删除重复数据,并保留一条

  • 使用 ROW_NUMBER() 窗口函数为每一行分配一个行号,按重复列的条件分组;
  • 使用 CTE 来表示重复的行;
  • 删除行号大于1的行。
WITH CTE AS (
SELECT
IOT_TerminalNo,SendDate,EVoltage,ECurrent,CreateTime,
ROW_NUMBER() OVER ( PARTITION BY IOT_TerminalNo, SendDate ORDER BY (SELECT 0) ) AS rn
FROM
Equipment_1001
where
--IOT_TerminalNo='Weldjoin-000001' AND
SendDate >='2025-04-01 00:00:00.000'
AND SendDate<'2025-07-07 13:26:32.830'
)
DELETE FROM CTE WHERE rn > 1;
  • PARTITION BY:按条件分组;
  • rn > 1:删除所有重复的行,只保留每组中的第一行;

SQL server 删除完全重复的数据并保留一条

前提

SQL server 数据库,某张表有主键,且存在多条完全重复的数据,并且重复数据的ID也完全相同,在删除其中一条后,所有的重复数据全都被删除了。

实现删除重复数据,并保留一条

  1. 使用 ROW_NUMBER() 窗口函数为每一行分配一个行号,按重复列的条件分组;
  2. 使用 CTE 来表示重复的行;
  3. 删除行号大于1的行。
WITH CTE AS (
	SELECT
		## 字段
		code,
		timePoint,
		ROW_NUMBER() OVER ( PARTITION BY code, TimePoint ORDER BY (SELECT 0) ) AS rn
	FROM 
		table_name
)
DELETE FROM CTE WHERE rn > 1;

解释

  • PARTITION BY:按条件分组;
  • rn > 1:删除所有重复的行,只保留每组中的第一行;

到此这篇关于SQL Server CTE删除重复数据的文章就介绍到这了,更多相关SQL Server cte删除重复数据内容请继续浏览下面的相关文章!

您可能感兴趣的文章

声明:本文来自互联网或用户投稿,该文观点仅代表作者本人,不代表本站立场。文章及其配图仅供学习和交流之用,版权归原作者所有,如有内容侵权或者其他违规问题,请联系本站处理。

相关文章