-- 处理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. Mac下用命令行获取苹果手机的UDID

    在终端输入命令行:system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Nu ...

  2. (尚029)Vue_案例_交互footer组件功能

    需要实现界面截图: 难点分析:sAllCheck必须定义为计算属性 1.想到问题: 一旦写一个组件,需要接收哪些属性?? 因为只有属性确定了,标签才好写 todos属性可以确定三个方面的显示 2.做交 ...

  3. JS的ES6的class

    1.类的创建: 定义类 类的构造函数 类的静态方法 类的一般属性和方法 //定义类 class Person{ // 类的静态方法,相当于Person.test = function(){consol ...

  4. rsync同步备份

    一.服务器端.备份客户端安装 rsync 服务. 1.环境: CentOS 主 IP:172.16.3.18 备 IP:172.16.3.19 2.安装 rsync 软件 #yum install r ...

  5. 洛谷 P5269 欧稳欧再次学车 题解

    P5269 欧稳欧再次学车 题目背景 请自行脑补一张欧稳欧学车的图 题目描述 欧稳欧学车时经常用一辆橡树车练习.这辆橡树车共有 \(N\) 个挡位,欧稳欧每秒可以把挡位增加或减少 \(1\),初始时( ...

  6. 机器学习之决策树原理和sklearn实践

    1. 场景描述 时间:早上八点,地点:婚介所 '闺女,我有给你找了个合适的对象,今天要不要见一面?' '多大?' '26岁' '长的帅吗?' '还可以,不算太帅' '工资高吗?' '略高于平均水平' ...

  7. MyBatis智能标签!

    if 语句 <select id="getOne" resultType="com.mybatis.entity.SmbmsProviderEntity" ...

  8. fiddler实现B/S端、APP抓包分析遇到的各种疑问

    阅读本文前您需要先下载fiddler并成功安装,并且要有一丢丢测试和接口基础或者在学习fidder时遇到了问题,或许本文可以帮助到你 一.B/S端抓包 Fiddler设置 1. 官网下载fiddler ...

  9. struct 声明类

    #include <iostream> using namespace std; struct Student{ Student(char *name, int age, float sc ...

  10. shell 只读变量

    test.sh: #!/bin/bash myUrl="http://www.google.com" readonly myUrl myUrl="http://www.r ...