在mysql中使用group by进行分组后取某一列的最大值,我们可以直接使用MAX()函数来实现,但是如果我们要取最大值对应的ID
那么我们需要取得整行的数据该怎么办?
起初搜寻到的资料是这样的:
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 倒叙排序,然后分组,那么每个分组中排在最上面的记录就是时间最大的记录
但是结果不是这样的,经过搜集资料,得出需要在排序后边加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
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
网友评论