-- 处理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. UI的编程学本质

    一.UI是数据的组织方式.展示及连接 UI模块--数据单元: 链接---数据单元间的联系: 相对链接-数据结构的树.链表: 绝对链接-大的模块级别的切换: 二.UI的IO学本质 屏幕.键盘 将信息输出 ...

  2. win10怎么查看当前用户账号

    https://jingyan.baidu.com/article/9225544679ab37851648f489.html

  3. Boring counting HDU - 3518 (后缀数组)

    Boring counting \[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \] 题意 给出一个字符串,求出其中出现两次及以上的子串个数,要 ...

  4. 电商平台+keepalived高可用

    192.168.189.131 电商平台 192.168.189.129 MySQL主192.168.189.130 MySQL备192.168.189.181 VIP 配置MySQL为互为主从并结合 ...

  5. yugabyte 做为hasura graphql-engine的pg数据引擎

    今天看了下yugabyte 的更新 ,ysql 基本可以生产可用,刚好测试了下与hasura graphql-engine的集成,发现很不错,可以直接运行 环境准备 docker-compose ve ...

  6. cronicle docker 运行试用

    Cronicle 是一款基于nodejs 开发的分布式任务调度工具,包含了比较全的UI,使用也比较简单,为了 方便学习,简单制作了一个docker 镜像,方便使用 Dockerfile   FROM ...

  7. 【JZOJ6246】【20190627】B

    题目 求逆续对个数为\(k\)的\(n\)阶排列个数\(mod \ 1e9+7\) $1 \le n  ,  k \le 10^5 $ 题解 $f_{i,j} = \sum_{k=0}^{i-1} f ...

  8. 如何设置select只读不可编辑且select的值可传递(摘自百度)

    selectname="role"id="role"οnfοcus="this.defaultIndex=this.selectedIndex;&qu ...

  9. GIT-本地仓库

    用户配置 git config --global user.name "name" git config --global user.email "123@qq.com& ...

  10. js截取get参数乱码问题之解决

    举个例子说一下: http://wwww.yctech.com/blog/post?id=1 像这样的话,通常通过如下代码直接截取不用做任何处理: function getQueryString(na ...