MySQL 分组选出某值最大的一行数据(需要加 limit)

在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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Explain是一个非常有的命令,可以用来获取关于查询执行计划的信息,以及如何解释输出。Explain命令是查看查...
    码同学软件测试阅读 2,111评论 0 0
  • 本文主要总结了工作中一些常用的操作及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有MyS...
    Chting阅读 613评论 0 1
  • 零.索引简介 1. 索引是什么 ①MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数...
    一条路上的咸鱼阅读 935评论 0 6
  • 对于中国式传统教育的接受者来说,听从父母习以为常的指指点点,接受父母下达的半强制性命令是一个从出生以来就摆在面前的任务。
    三毛_4683阅读 234评论 0 0
  • 已是不惑之年,虚荣心让我多年无法面对自己。出身于一个家庭联产承包责任制的时代的我,父母都是地地道道的最老实朴实的中...
    澳洲太阳鸟阅读 88评论 0 0