在mysql中使用group by和order by取每一个分组中日期最大一行数据,亲测有效

 

在mysql中使用group by进行分组后取某一列的最大值,咱们能够直接使用MAX()函数来实现,可是若是咱们要取最大值对应的ID,那么咱们须要取得整行的数据。最开始的实现方法以下mysql

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进行操做的话,结果确定是错误的。sql

最后在网上找到了一个变通的办法,以下markdown

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 操做。spa

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.net

相关文章
相关标签/搜索