轉載自:https://blog.csdn.net/shiyong1949/article/details/78482737mysql
在mysql中使用group by進行分組後取某一列的最大值,咱們能夠直接使用MAX()函數來實現,可是若是咱們要取最大值對應的ID,那麼咱們須要取得整行的數據。最開始的實現方法以下sql
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進行操做的話,結果確定是錯誤的。函數
最後在網上找到了一個變通的辦法,以下spa
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時間降序排列,而後再分組,那麼每一個分組中排在最上面的記錄就是時間最大的記錄,對執行結果檢查後,確實能夠實現咱們的需求。.net
注意:
limit 10000000000 是必需要加的,若是不加的話,數據不會先進行排序,經過 explain 查看執行計劃,能夠看到沒有 limit 的時候,少了一個 DERIVED 操做。3d
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