在mysql中使用group by進(jìn)行分組后取某一列的最大值寻狂,我們可以直接使用MAX()函數(shù)來實(shí)現(xiàn),但是如果我們要取最大值對(duì)應(yīng)的ID
那么我們需要取得整行的數(shù)據(jù)該怎么辦卒废?
起初搜尋到的資料是這樣的:
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
首先按照 create_time 倒敘排序里逆,然后分組娇妓,那么每個(gè)分組中排在最上面的記錄就是時(shí)間最大的記錄
但是結(jié)果不是這樣的肛根,經(jīng)過搜集資料辫塌,得出需要在排序后邊加limit 10000000000
如果不加的話,數(shù)據(jù)不會(huì)先進(jìn)行排序派哲,通過 explain 查看執(zhí)行計(jì)劃臼氨,可以看到?jīng)]有 limit 的時(shí)候,少了一個(gè) 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
image.png
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
image.png