目标表格《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 ;