[Mysql]分组取最新一条


 

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

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

方案2:(最佳方案): 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM