在mysql中使用group by和order by取每個分組中日期最大一行數據,親測有效


 

在mysql中使用group by進行分組后取某一列的最大值,我們可以直接使用MAX()函數來實現,但是如果我們要取最大值對應的ID,那么我們需要取得整行的數據。最開始的實現方法如下

SELECT t.event_id,MAX(t.create_time) as create_time
from monitor_company_event t 
GROUP BY t.company_name,t.row_key,t.event_subType

 

執行以上SQL語句確實可以得到每個分組中最大的create_time,但是經檢查發現最大的create_time對應event_id不是同一行的數據,如果我們要對event_id進行操作的話,結果肯定是錯誤的。

最后在網上找到了一個變通的辦法,如下

SELECT t.*
FROM (select * from `monitor_company_event` order by `create_time` desc limit 10000000000) t
GROUP BY t.company_name,t.row_key,t.event_subType

 

從以上SQL中可以看出,我們先對所有的數據按create_time時間降序排列,然后再分組,那么每個分組中排在最上面的記錄就是時間最大的記錄,對執行結果檢查后,確實可以實現我們的需求。

注意:
limit 10000000000 是必須要加的,如果不加的話,數據不會先進行排序,通過 explain 查看執行計划,可以看到沒有 limit 的時候,少了一個 DERIVED 操作。

explain 
SELECT t.*
FROM (select * from `monitor_company_event` order by `create_time` desc limit 10000000000) t
GROUP BY t.company_name,t.row_key,t.event_subType

 

 

explain 
SELECT t.*
FROM (select * from `monitor_company_event` order by `create_time` desc ) t
GROUP BY t.company_name,t.row_key,t.event_subType

 

 

 

 

轉: https://blog.csdn.net/shiyong1949/article/details/78482737

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM