-- 处理IEMI重复的历史数据,建档日期(只有年月日)倒序,档案ID倒序,根据IMEI查档案,查询的结果,相同IMEI下的第一条记录的IEMI不处理,其他的记录的imei 改为空。

-- USE `testdb`;选择对应的数据库名称

-- 创建存储过程proc_UpdateIMEIUser

/*判断是否存在,如果存在就删除*/
DROP PROCEDURE IF EXISTS `proc_UpdateIMEIUser`; DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_UpdateIMEIUser`(IN valIMEI VARCHAR(100))
BEGIN
DECLARE temNumber INT DEFAULT 0;
DECLARE TempUserID INT; /*每条记录循环时的临时ID*/
DECLARE isDone INT DEFAULT 0; /*判断是否还有记录*/
DECLARE UpdateIMEICursor CURSOR FOR SELECT UserID FROM `sysUser` WHERE IMEI =valIMEI ORDER BY CreateDate DESC,UserID DESC;/*游标处理*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET isDone = 1;/*如果不存在就设置为1,即为true*/
OPEN UpdateIMEICursor; /*OPEN*/
REPEAT /*开始循环数据*/
FETCH UpdateIMEICursor INTO TempUserID;
IF NOT isDone THEN
IF temNumber > 0 THEN
UPDATE sysUser SET IMEI='' WHERE UserID=TempUserID;
END IF;
SET temNumber=temNumber+1;
END IF;
UNTIL isDone END REPEAT;
CLOSE UpdateIMEICursor;/*CLOSE,对应上面的open IMEICursor;*/
END $$
DELIMITER ; -- 创建存储过程 proc_IMEIUser /*判断是否存在,如果存在就删除*/
DROP PROCEDURE IF EXISTS `proc_IMEIUser`; DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_IMEIUser`()
BEGIN
DECLARE valIMEI VARCHAR(100); /*每条记录循环时的临时IMEI*/
DECLARE isDone INT DEFAULT 0; /*判断是否还有记录*/
DECLARE IMEICursor CURSOR FOR SELECT IMEI FROM `sysUser` WHERE IsDel = 0 AND IMEI <>'' AND IMEI IS NOT NULL GROUP BY IMEI HAVING COUNT(*) > 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET isDone = 1;/*如果不存在就设置为1,即为true*/
OPEN IMEICursor; /*OPEN*/
REPEAT /*开始循环数据*/
FETCH IMEICursor INTO valIMEI;
IF NOT isDone THEN
CALL proc_UpdateIMEIUser(valIMEI);
END IF;
UNTIL isDone END REPEAT;
CLOSE IMEICursor;/*CLOSE,对应上面的open IMEICursor;*/
END $$
DELIMITER ; -- 执行存储过程处理IMEI的重复数据
CALL proc_IMEIUser(); /*使用完毕后要删除存储过程*/
DROP PROCEDURE proc_UpdateIMEIUser;
DROP PROCEDURE proc_IMEIUser;

注意:建档日期只有年月日, 而且有修改的入口,所以才先将建档日期倒序,档案ID倒序,最新的数据排在前面。

如果建档日期有年月日 时分秒,并且不能修改建档日期,那么可以去最大的档案ID就是最新的,可以直接写update脚本来处理,注意需要执行多次,如下:

UPDATE `sysUser` a,(SELECT MIN(UserID) AS UserID FROM `sysUser` WHERE IsDel = 0
AND IMEI IS NOT NULL AND IMEI <>''
GROUP BY IMEI
HAVING COUNT(*) > 1) b
SET a.IMEI =''
WHERE a.IsDel = 0 AND a.`UserID` = b.UserID;

mysql批量更新数据,循环select记录然后更新某一字段的更多相关文章

  1. mysql批量更新数据,即:循环select记录然后更新某一字段

    原因: 今天遇到一个问题:一个数据表case_folder_info想要实现自定义排序功能,就在表里新加了一个字段SORT_NUMBER,由于表里存在已有数据,所以这个SORT_NUMBER字段都为空 ...

  2. mysql 更新数据表的记录

    对于表里的记录值,可以通过update 命令进行更改,语法如下: UPDATE tablename SET field1=value1,field2.=value2,……fieldn=valuen [ ...

  3. mybatis学习之路----mysql批量新增数据

    原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...

  4. java连接mysql批量写入数据

    1.采用公认的MYSQL最快批量提交办法 public void index() throws UnsupportedEncodingException, Exception { //1000个一提交 ...

  5. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  6. mysql批量插入数据的基类

    自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...

  7. mysql 批量插入数据

    MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...

  8. mysql批量插入数据优化

    一.问题 很早以前做了一个更新功能,就是将A表中的数据全部查找出来,相对B表中改变的数据更新B表,B表中没有的数据插入B表. 最近发现该功能执行速率减慢,有时还跑超时.原来是A表中数据渐渐变多,就有了 ...

  9. mysql 批量删除数据

    批量删除2000w数据 使用delete from table太慢 //DELIMITER DROP PROCEDURE if EXISTS deleteManyTable; create PROCE ...

随机推荐

  1. Pros and Cons of Game Based Learning

    https://www.gamedesigning.org/learn/game-based-learning/ I remember days gone by at elementary schoo ...

  2. docker 启动失败 Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

    CentOS7安装docker,安装成功后,启动失败 提示: 我们可以看到此处它提示是Failed to start Docker Application Container Engine. 于是在网 ...

  3. BZOJ 4411: [Usaco2016 Feb]Load balancing 线段树+二分

    code: #include <bits/stdc++.h> #define N 100060 #define M 1000000 #define lson x<<1 #def ...

  4. system.stat[resource,<type>]

    系统信息. 整型或者浮点型 ent - 该分区有权接收的处理器单元数(float) kthr, - 关于内核线程状态的信息: r - 平均可运行内核线程数(float) b - 虚拟内存管理器等待队列 ...

  5. 【CF55D】Beautiful numbers

    [CF55D]Beautiful numbers 题面 洛谷 题解 考虑到如果一个数整除所有数那么可以整除他们的\(lcm\),而如果数\(x\)满足\(x\bmod Lcm(1,2...,9)=r\ ...

  6. js操作表格、table、

    js添加一行.删除一行 let str="<tr>" +"<td>"+a[1]+"</td>" +&qu ...

  7. [BUAA软工]提问回顾与个人总结

    提问回顾与个人总结 项目 内容 所属课程 2019春季计算机学院软件工程(任健) 所属作业 提问回顾与问题总结 课程目标 理解软件工程的作用和重要性,提升工程能力,团队协作能力 作业目标 回顾软工课程 ...

  8. mpvue中按需引入echarts

    大家都知道小程序文件大小不能超过2M, 在项目中引入echarts后,文件大小远远超出2M了.因为echarts文件默认是包含所有图表代码的,所以文件体积会比较大.解决办法如下: 安装 首先我们先安装 ...

  9. 用Python自动办公,做职场高手(完结)

    教程目录: ┣━07.S2 Word自动化处理,又快又好做文档┃  ┣━36 本章介绍┣━08.[Word]S2-1 轻松用Python快速生成Word文档┃  ┣━45.[真实案例]S2-1-3 批 ...

  10. js Map的使用

    setExpenseAndAmountSum: function() { var detailList = vehicleVueObj.vehicleData; var expenseAmountSu ...