[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