开发者

Mysql分组查询取max那条记录其它字段方式

开发者 https://www.devze.com 2023-11-19 12:42 出处:网络 作者: 一叶飘零_sweeeet
目录mysql分组查询取max那条记录其它字段需求描述问题描述Mysql分组查询max值所在的记录总结Mysql分组查询取max那条记录其它字段
目录
  • mysql分组查询取max那条记录其它字段
    • 需求描述
    • 问题描述
  • Mysql分组查询max值所在的记录
    • 总结

      Mysql分组查询取max那条记录其它字段

      需求描述

      现有有需求要按类型分组,查询出每一分组最近的一条记录,返回字段包含id,定时任务执行时间(start_time)和任务id(job_id)。

      SELECT id, MAX(start_time) ASpython startTime,job_id AS jobId FROM `sta_task_alarm` GROUP BY `job_id`;

      Mysql分组查询取max那条记录其它字段方式

      问题描述

      上面这个SQL查询出来的id 并不是我们想要的max 那条记录的id,那么我们怎么查询到

      MAX(start_time) 那条对应的 id和job_id(这个上面可以查询出来)php呢?

      想到用 GROUP_CONCAT 函数去实现:

      SELECT SUBSTRING_INDEX( GROUP_CONCAT(id ORDER BY `id` DESC),',',1) AS id,job_id AS jobId
      SUBSTRING_INDEX( GROUP_CONCAT(start_time ORDER BY `start_time` DESC),',',1) AS startTime 
      FROM `sta_task_alarm` GROUP BY job_id;

      这样是可以实现,查询出的结果为:

      Mysql分组查询取max那条记录其它字段方式

      这个结果是正确的。

      验证一下原始数据:

      Mysql分组查询取max那条记录其它字段方式

      最后:

      其实因为id是自增的,按下面这样查就可以了:

      SELECT MAX(id) AS id, job_id AS jobId, MAX(start_time) AS startTime	
      	FROM `sta_task_alarm` WHERE is_delete = 0 GROUP BY job_id;

      执行结果:

      Mysql分组查询取max那条记录其它字段方式

      Mysql分组查询max值所在的记录

      临近下班,要写一个sql。着急下班,所以有点乱。想了半天没想出来这么写这个sql。查询表里的max值和这个值所在的记录。

      晚上睡前才意识到自己吧内联inner jion 概念搞混了。编程inner只取字段相等的记录。所以查询伪代码如下。

      例如,查询一个表 table 每一天记录的最大时间。

      先查询这个表A中,每一天记录的最大时间。将查询结果作为另一个表B。然后将两个表关联,关联条件既B表最大时间等于A表时间和B表天数等于A表天数。

      SELECT
        B.new_date,
        A.*
      FROM
        mytable AS A
      INNER JOIN (
        SELECT
          max(date_time) new_date,
          myday
        FROM
          mytable
       编程客栈 GROUP BY
          myday
      ) AS B ON A.date_tandroidime = B.new_date
      AND A.myday = B.myday

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消