需求
例如:表customer_tel中一个用户ID(user_id)有多条手机号记录,需要取出每个user_id下最新一条手机记录(以update_time)判断最新,表数据如下
表数据
方法一(mysql实现)
SELECT * FROM `customer_tel` t1
inner join
(SELECT USER_ID,max(update_time) update_time from customer_tel GROUP BY USER_ID) t2
on t1.USER_ID = t2.USER_ID and t1.update_time = t2.update_time;
结果
image.png
方法二
利用row_number()
over (partition by user_id order by update_time desc)实现,但是mysql版本太低不能实现,hive,Postgre SQL,orecal都可以实现
select * from (select user_id,phone,update_time,row_number()
over (partition by user_id order by update_time desc) rank from customer_tel ) t where t.rank = 1