存储过程--大表格数据去重

该篇文章描述了一个SQL存储过程,用于检测并从目标表snvol_汇总中去除重复的z_code和r_no组合,保留每个组合的最早出现的记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标表格《snvol_汇总》存在重复的数据,
z_code和r_no一致则判断为重复数据;
首先建一表格《数据去重》,将有重复的“z_code和r_no”插入目标表格,
然后对《数据去重》中的条目进行遍历,记录下“z_code和r_no”一致的最小的原表格的编号。
将原表格中的其他数据删除。

drop procedure if exists 数据去重;
delimiter //
CREATE PROCEDURE 数据去重()
MODIFIES SQL DATA
begin declare x_date char(8) default ‘20000101’;
declare x_编号 int default 9999;
declare x_max编号 int default 9999;
declare x_code char(6) default ‘000001’;
declare x_rno int(4) default 0;
declare x_编号o int default 9999;

drop table if exists 数据去重;
create table 数据去重(
编号 int auto_increment,
z_code char(6),
r_no smallint,
primary key(编号)
)engine = innodb default charset = utf8;
insert into 数据去重(z_code,r_no) select z_code,r_no from snvol_汇总 group by z_code,r_no having count(*)>=2;
set x_编号 = 1;
set x_max编号 = (select max(编号) from 数据去重 );
while x_编号 <= x_max编号 do
set x_code = (select z_code from 数据去重 where 编号 = x_编号 );
set x_rno = (select r_no from 数据去重 where 编号 = x_编号 );
set x_编号o = (select 编号 from snvol_汇总 where z_code = x_code and r_no = x_rno order by 编号 limit 1);
delete from snvol_汇总 where z_code = x_code and r_no = x_rno and 编号<>x_编号o ;
set x_编号 = x_编号 +1;
end while;
end//
delimiter ;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值