个人信息表的重复号码
个人信息表 info:
唯一主键注册人员编号 no,注册日期 ctime,以及手机号码 phone_num。由于一个注册人 只能有一个注册手机号码,系统中手机号存在重复,属于系统 bug。
(1)、找出重复的手机号码,以及对应的注册人信息;
select * from info;
select phone_num,count(phone_num) from info group by phone_num;
select phone_num,count(phone_num) from info group by phone_num having count(phone_num)>1;
select phone_num from info group by phone_num having count(phone_num)>1;
select * from info where phone_num in (select phone_num from info group by phone_num having count(phone_num)>1);
(2)、将重复手机号码的记录删除,重复的记录中,保留最早注册时间的记录
开窗函数row_number()的基本语法为
row_number() over (partition by column1, column2 order by column3 desc) as new_name
该函数的作用是,按照column1和column2对数据进行分组,在每一个分组内,按照column3进行排序,排序之后,对每一个分组内的多行数据,标记上序号,序号从1开始,依次递增。当然,可以给序号取一个新的名字new_name。
进行开窗操作后,就可以再进行一次select+where操作,来选出需要的数据了。
SELECT a.`no`,a.ctime,a.phone_num FROM (SELECT `no`,phone_num,ctime ,row_number() over(partition by phone_num order by ctime asc) r where a.r = 1;
用的是mysql的话可能需要mysql5.8才能操作