mysql通過group?by分組取最大時間對應(yīng)數(shù)據(jù)的兩種有效方法
1、項(xiàng)目記錄表project_record的結(jié)構(gòu)和數(shù)據(jù)如下:
以下為項(xiàng)目記錄表project_record的所有數(shù)據(jù)。project_id為項(xiàng)目Id,on_project_time為上項(xiàng)目時間。(每一條數(shù)據(jù)代表著上某個項(xiàng)目(project_id)的時間(on_project_time)記錄)
2、我們的需求是:取出每個項(xiàng)目中最大上項(xiàng)目時間對應(yīng)的那條數(shù)據(jù)。(即根據(jù)project_id分組,取出每組中最大的on_project_time對應(yīng)的數(shù)據(jù)。)上方紅框是我們要查出的數(shù)據(jù)。
3、錯誤代碼:
SELECT * FROM (SELECT * FROM project_record order by on_project_time desc) t GROUP BY project_id;
查詢結(jié)果錯誤:
結(jié)果看似正確的,實(shí)則是錯誤的。每個項(xiàng)目最大的上項(xiàng)目時間能正確查出,但是數(shù)據(jù)對應(yīng)的id不正確。
分析發(fā)現(xiàn),對于每一個分組,分組后的結(jié)果總是取組中主鍵(id)最小的數(shù)據(jù),即group by project_id 總會對project_id執(zhí)行排序(正序)
而不論臨時表(t)中是否已排序,都會取組中主鍵id最小的一行數(shù)據(jù)。換句話說 臨時表t 內(nèi)的排序 無法影響外層的group by 的操作。
4、 正確方法如下:
方法一:
SELECT t1.* FROM project_record t1 INNER JOIN ( SELECT DISTINCT(id) id FROM project_record ORDER BY on_project_time DESC) AS t2 ON t2.id = t1.id GROUP BY t1.project_id;
查詢結(jié)果正確:
思路:需要關(guān)聯(lián)一張表,這個關(guān)聯(lián)表t2中的數(shù)據(jù)是對原表t1按照上項(xiàng)目時間倒敘排列,注意,此處必須使用distinct,此處distinct的作用可以理解為將t1表數(shù)據(jù)順序固定為t2表順序。
主表GROUP BY 后會取出按條件分組后的第一條數(shù)據(jù)。
方法二:
select t1.* FROM project_record t1 INNER JOIN (SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY on_project_time DESC),',',1) AS id FROM project_record GROUP BY project_id) AS t2 ON t2.id = t1.id;
查詢結(jié)果正確:
SUBSTRING_INDEX 用法:取排序后的分組的第一條數(shù)據(jù)。
本人習(xí)慣使用第一種方法。
總結(jié)
到此這篇關(guān)于mysql通過group by分組取最大時間對應(yīng)數(shù)據(jù)的兩種有效方法的文章就介紹到這了,更多相關(guān)mysql group by分組取對應(yīng)數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SQL?Group?By分組后如何選取每組最新的一條數(shù)據(jù)
- python?DataFrame數(shù)據(jù)分組統(tǒng)計groupby()函數(shù)的使用
- MySQL數(shù)據(jù)庫分組查詢group by語句詳解
- pandas數(shù)據(jù)分組groupby()和統(tǒng)計函數(shù)agg()的使用
- 基于mysql實(shí)現(xiàn)group by取各分組最新一條數(shù)據(jù)
- 利用Pandas和Numpy按時間戳將數(shù)據(jù)以Groupby方式分組
- Sql group by 分組取時間最新的一條數(shù)據(jù)(示例代碼)
相關(guān)文章
CentOS6.5下RPM方式安裝mysql5.6.33的詳細(xì)教程
本文給大家詳細(xì)介紹CentOS6.5下RPM方式安裝mysql5.6.33的教程,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友一起看看吧2016-10-10mysql建庫時提示Specified key was too long max key length is 1000
本文將詳細(xì)提供mysql建庫時提示Specified key was too long max key length is 1000 bytes的問題的解決方法,有需求的朋友可以參考2012-11-11解決Mysql建表時報錯invalid?ON?UPDATE?clause?for?'create_d
這篇文章主要介紹了解決Mysql建表時報錯invalid?ON?UPDATE?clause?for?'create_date'?column問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12MySQL基礎(chǔ)教程第一篇 mysql5.7.18安裝和連接教程
這篇文章主要為大家詳細(xì)介紹了MySQL基礎(chǔ)教程第一篇,mysql5.7.18安裝和連接教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Mysql在線回收undo表空間實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于Mysql在線回收undo表空間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09