<
>

删除MySQL重复数据的方法

2019-01-05 10:02:09 来源:易采站长站 作者:刘景俊


由上图可见,同一个时间点的同一个设备的数据有冗余,现在我们要把这些冗余数据去掉。

解决方法

思路是这样的:首先应该按照conf_id和时间点来判断,进行分组(group by)查询,每组中再取一个就可以。分组是很简单,但是分组怎么取一个呢?我采用了中间表的形式。

创建中间表,并把数据导入中间表

create table perf_linux_t like perf_linux;
insert into perf_linux_t select * from perf_linux;

在中间表中增加一个字段,此字段是自增长的。
ALTER TABLE `perf_linux_t`
ADD COLUMN `auto_id` INT NOT NULL AUTO_INCREMENT ,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`auto_id`);

删除无用数据

先查询一下

select min(auto_id) as auto_id from perf_linux_t group by insert_time ;

删除不对的数据
delete  from perf_linux_t where auto_id not in (select min(auto_id) as auto_id from perf_linux_t group by insert_time);

慢着,输出错误:

You can't specify target table 'perf_linux_t' for update in FROM clause

不能删除啊,那只能再建一个中间表了。

再建中间表

create table tmp like perf_linux_t;

转变思路,不删除不符合的数据,而是把符合的数据存到这张新表中。
insert into tmp select * from perf_linux_t where auto_id in (select min(auto_id) as auto_id from perf_linux_t group by insert_time,conf_id );

把这张表中的无用列删除
ALTER TABLE `tmp`
DROP COLUMN `auto_id`,
DROP PRIMARY KEY;

导回数据

删除原来的数据

truncate table perf_linux;

插入数据
insert into perf_linux select * from tmp;

删除中间表
drop table tmp;
drop table perf_linux_t;

总结

通过这个方法,数据变为了42387条,删除了冗余的数据。但实际上程序的问题并没有完全定位,还需要观察才能定位问题。

希望本文所述对大家的mysql数据库程序设计有所帮助。

您可能感兴趣的文章:

mysql查找删除重复数据并只保留一条实例详解Mysql删除重复的数据 Mysql数据去重复MySQL中删除重复数据的简单方法MySQL 删除数据库中重复数据方法小结MYSQL删除重复数据的简单方法MySQL数据库中删除重复记录的方法总结[推荐]删除mysql数据库中的重复数据记录Mysql删除重复数据保留最小的id 的解决方法
暂时禁止评论

微信扫一扫

易采站长站微信账号