需求描述

数据库为mysql , 清理数据要对重复历史数据做删除操作, 环境有以下特点
- 目标表没有主键
- 不允许做表结构变动
- 重复数据并非全部字段重复, 只是部分标志字段重复

解决思路与困境解决

最初的思路是按照指定字段找出重复记录集, 每组仅保留一条记录, 其余数据做删除处理
伪sql实现如下:

delete from r_data_1d a
where (a.c_res_id,a.c_task_time) in (select c_res_id,c_task_time from r_data_1d group by c_res_id,c_task_time having count(*) > 1)
and a.rowid not in (select min(rowid) from r_data_1d group by c_res_id,c_task_time having count(*)>1) 

困境及解决方案:
1. mysql不支持rowid, 且表中没有主键.
解决方案: 采取 收集-删除-增补 三步走方式进行处理, 此处引进临时表 r_data_1d_temp
2. 处理删除步骤时, 发现mysql不支持对目标表进行删除中查询操作, 如该语句
delete from a where a.b in (select b from a group by b having count(*) > 1)

解决方案: 采取 收集-删除 两步完成该步骤, 此处引进临时表 r_data_1d_del_temp

最终方案

最终对上述步骤进行了整合, 简单描述为 收集补全-收集删除信息-执行删除-执行补全
最终sql如下:

create r_data_1d_temp
select c_business_id, c_res_id , c_sub_res_id , max(c_in_avg), max(c_in_min), max(c_in_max), max(c_out_avg), max(c_out_min), max(c_out_max), c_task_time , c_tag1, c_tag2 from (
select * from r_data_1d a where (a.c_res_id,a.c_task_time) in (select c_res_id,c_task_time from r_data_1d group by c_res_id,c_task_time having count(*) > 1) )a
group by c_business_id, c_res_id, c_sub_res_id, c_task_time, c_tag1, c_tag2;create table r_data_1d_del_temp select c_res_id,c_task_time from r_data_1d group by c_res_id,c_task_time having count(*) > 1;delete from r_data_1d
where (c_res_id,c_task_time) in (select * from r_data_1d_del_temp);drop table r_data_1d_del_temp;insert into r_data_1d select * from r_data_1d_temp;drop table r_data_1d_temp;

后记

目前该实现还是较为难看, 贴出来只是抛砖引玉, 希望能请到大神给出更优的解

吃相难看的mysql重复数据删除相关推荐

  1. mysql 删除mul key_删除MySQL重复数据的方法

    本文实例讲述了删除MySQL重复数据的方法.分享给大家供大家参考.具体方法如下: 项目背景 在最近做的一个linux性能采集项目中,发现线程的程序入库很慢,再仔细定位,发现数据库里面很多冗余数据.因为 ...

  2. IBM结盟飞康VTL提供高性能备份与重复数据删除

    全球磁盘式数据保护解决方案领导厂商,美国飞康软件公司 (NASDAQ:FALC) 近日对外宣布,与IBM公司建立Indirect OEM (IOEM)合作伙伴关系.根据IBM Indirect OEM ...

  3. 深入理解数据压缩与重复数据删除

    原文地址:http://blog.csdn.net/liuaigui/article/details/6324133 [导读] 数据压缩与重复数据删除两种技术有何区别与联系呢?实际中又该如何正确应用呢 ...

  4. 重复数据删除技术概述

    重复数据删除技术概述 一.   重复数据删除的分类 1.       源端重复数据删除和目标端重复数据删除 源端消重在数据源进行,传输的是已经消重后的数据,能够节省网络带宽,但会占用大量源端系统资源. ...

  5. Hyper-v Server重复数据删除技术

    Hyper-v Server重复数据删除技术 老衲听说windows Server 2012中新增了一项技术叫做重复数据删除,据说这个重复数据删除可以大大的节省磁盘的空间,下面我们来看看什么是重复数据 ...

  6. EMC升级Celerra 支持闪存及重复数据删除

       WatchStor独家译文]虽然在上周接受采访时,EMC公司存储部门总裁David A.Donatelli就表示EMC近期将发布大量新品,但直到美国时间上周末,EMC才正式发布了其升级Celer ...

  7. Windows 8.1 重复数据删除

    我们知道windowsserver2012中有一种功能,重复数据删除,实际上在windows8.1中也支持,以下就是就如何在windows8.1中开启重复数据删除 概述如下: 1.到http://sd ...

  8. 重复数据删除(De-duplication)技术研究

    http://godchenmeng.iteye.com/blog/752567 继续推荐刘爱贵同学的重复数据删除dedupe 转载于:https://www.cnblogs.com/cloudsto ...

  9. Windows 8.1 重复数据删除——规划部署(二)

    一.规划部署目标    Windows 8.1&Server 2012 的重复数据删除设计为安装到主要数据卷上,而无需添加任何附加的专用硬件.这意味着你可以安装和使用该功能,而不会影响服务器上 ...

最新文章

  1. s5pv210 uboot-2012-10移植(七) 之支持SD卡
  2. Apache Flink 零基础入门(五)Flink开发实时处理应用程序
  3. ./dmitry -p ip或者域名 -f -b
  4. 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
  5. c++ 函数参数问题
  6. 猎豹移动傅盛:区块链将重塑整个社会关系,CEO恐将职位不保
  7. thymeleaf th:href 多个参数传递格式
  8. 改善C#公共程序类库质量的10种方法
  9. matlab int 求定积分
  10. unity3d 各种优化综合
  11. 学生签到系统c代码_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...
  12. 苹果手机绕激活锁之亲身体验
  13. 【新书推荐】【2020】电力系统优化问题的方法、算法及MATLAB程序
  14. Java实现QQ邮箱验证码发送
  15. 求1-1/2+1/3-1/4+...+1/99-1/100。
  16. 2022-06-08你抢不到的可达鸭,芯片成本只要几块钱KFC(-JPG)
  17. FPGA error:buffers of the same direction cannot be placed in series.
  18. 南都周刊:别了,老兵乔布斯
  19. 可汗学院统计学 task 3
  20. 物联网Lora模块从入门到精通(一)Lora模块初识-新大陆物联网

热门文章

  1. Firefox 不能播放斗鱼直播的问题
  2. 画画时如何把阴影画好
  3. 金数据晚点名自动提交
  4. 中国电动汽车百人会论坛(2023)将于3月底在京举办
  5. 自动控制原理模拟卷7
  6. 因特网、互联网、以太网、局域网、广域网的区别
  7. KMEANS底层实现
  8. Quicker |无法调用chrome浏览器
  9. 安卓软件如何迁移鸿蒙,华为余承东:安卓系统迁移到鸿蒙OS 只需1-2天时间
  10. spring boot整合Knife4j取代swagger2.0