[Mysql]分组取最新一条

 

我有如下这张表的数据,需要根据mobile电话号码分组,每条电话取最新的数据

方案1: SELECT * from (SELECT * from model_online_forecastscore_phone0001 ORDER BY id DESC) as cn GROUP BY cn.mobile

最佳方案: 

SELECT m1.*
FROM model_online_forecastscore_phone m1 LEFT JOIN model_online_forecastscore_phone m2
ON (m1.mobile = m2.mobile AND m1.id < m2.id) WHERE m2.id is NULL;

可以看到通过explain 看执行效率非常高,这个通过left join的知识点可以参考

http://www.mysqltutorial.org/mysql-left-join.aspx

1.不加 m1.id < m2.id 和where子句

SELECT m1.*,m2.*
FROM model_online_forecastscore_phone0001 m1 LEFT JOIN model_online_forecastscore_phone0001 m2
ON (m1.mobile = m2.mobile)

 

2..不加where条件查看结果

SELECT m1.*,m2.*
FROM model_online_forecastscore_phone0001 m1 LEFT JOIN model_online_forecastscore_phone0001 m2
ON (m1.mobile = m2.mobile AND m1.id < m2.id)

通过左连接将mobile*mobile结果累积.

关键在于左连接会以左表作为基准,如果右表没有符合条件的会以null补充。

参考:https://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group-mysql

转载于:https://www.cnblogs.com/zhengwangzw/p/10143639.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值