想要删除重复记录(所有字段值相同),怎么处理?
with cte AS ( select row_number() over (partition by wo_woid, wo_lx order by(select null)) as rn,* from jserp.Wo_Modified_Record_Backup where wo_woid like 'MO24%' and wo_woid>='MO240601' and len(wo_woid)=14 and wo_woid='MO240612039480' ) --update cte --set wo_sjkgrq = dateadd(day,-2,getdate()) -- where rn = 1; delete from cte where rn > 1;
row_number() 这是一个窗口函数,用于为每一行生成一个唯一的序号。这个序号是基于特定的分组和排序条件生成的。
over (partition by Column1, Column2 order by (select null))
partition by:
含义:将结果集划分为多个部分(或分区),每个分区内的记录会被单独计算 row_number()。在这个例子中,Column1 和 Column2 是用来定义相同记录的列。
例如,如果有多条记录的 Column1 和 Column2 值完全相同,这些记录将被视为一个分区。
order by(select null):
含义:在没有指定具体的排序列时,使用 (select null) 表示不考虑排序。这意味着在每个分区内,生成的序号是随机的,因为没有明确的排序规则。
通常情况下,你需要根据某个列进行排序,以确保序号的一致性,但在这里我们只关心分区内的行号,所以可以用 (select null)。
总结
整段查询的作用是:
从 Wo_Modified_Record_Backup 中选择所有列,并为每一组在 wo_woid 和 wo_lx 上相同的记录生成一个行号 (rn)。rn 的值在每个分区(相同的 wo_woid 和 wo_lx 组合)内从 1 开始递增。
标签:woid,记录,wo,Sqlserver,两条,rn,null,select From: https://www.cnblogs.com/pandora2050/p/18326761