Mysql分組查詢取max那條記錄其它字段方式
Mysql分組查詢取max那條記錄其它字段
需求描述
現有有需求要按類型分組,查詢出每一分組最近的一條記錄,返回字段包含id,定時任務執(zhí)行時間(start_time)和任務id(job_id)。
SELECT id, MAX(start_time) AS startTime,job_id AS jobId FROM `sta_task_alarm` GROUP BY `job_id`;
問題描述
上面這個SQL查詢出來的id 并不是我們想要的max 那條記錄的id,那么我們怎么查詢到
MAX(start_time) 那條對應的 id和job_id(這個上面可以查詢出來)呢?
想到用 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;
這樣是可以實現,查詢出的結果為:
這個結果是正確的。
驗證一下原始數據:
最后:
其實因為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;
執(zhí)行結果:
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_time = B.new_date AND A.myday = B.myday
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決Mysql5.7.17在windows下安裝啟動時提示不成功問題
這篇文章主要介紹了解決Mysql5.7.17在windows下安裝啟動時提示不成功問題,需要的朋友可以參考下2017-03-03