最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL分組查詢獲取每組最新的一條數(shù)據詳解(group?by)

 更新時間:2024年08月17日 10:12:45   作者:碼農愛java  
在寫報表功能時遇到一個需要根據用戶id分組查詢最新一條錢包明細數(shù)據的需求,下面這篇文章主要給大家介紹了關于MySQL分組查詢獲取每組最新的一條數(shù)據的相關資料,需要的朋友可以參考下

業(yè)務場景:

最近項目中迭代一個舊的功能,再原有的設計上進行功能拓展(因成本等原因,不考慮項目重構),其中設計到了這么一個場景,同一個業(yè)務 ID 在同一張表中有 N 條數(shù)據,需要查詢出最新的那一條數(shù)據。

解決方案:

  • 使用 group by id, 再按時間或者 id 降序,理論上就可以獲取最新的數(shù)據。
  • 每個業(yè)務 id 都去數(shù)據庫查詢一次,再按時間降序,最后 limit 1,就可以獲取到最新的數(shù)據(這個方案一般在項目中是不考慮的)。
  • 使用 group by id。。。這里先賣個關子。

group by id 方案驗證:

test 表是主鍵自增的。

先查看數(shù)據:

select id,kpa_id,progress from test  where kpa_id=10;

執(zhí)行結果:

可知同一個業(yè)務 ID 查詢結果有22條數(shù)據。

group by id 獲取最新的一條數(shù)據,SQL如下:

select id,kpa_id,progress from test where kpa_id=10 group by kpa_id order by id desc;

執(zhí)行結果:

很明顯沒有獲取到最新的一條數(shù)據,該方案不可行。

再次換一種SQL語法,如下:

select id,kpa_id,progress from (select * from test order by id desc)t where kpa_id=10 group by kpa_id;

執(zhí)行結果:

很明顯還是沒有獲取到最新的一條數(shù)據,該方案仍然不可行,那怎么樣才可以實現(xiàn)呢?

那怎么樣才可以實現(xiàn)呢?

分析:既然要獲取最新的數(shù)據,id自增,時間也是順序的,最新的數(shù)據是不是意味這就是 id 或者時間最大的那條數(shù)據?MySQL 中獲取最大的值使用 max()函數(shù)既可,下面我們來驗證一下。****

使用 max 函數(shù)獲取最大的 id,SQL 如下:

select id,kpa_id,progress from test where id in(select max(id) from test where kpa_id=10 group by kpa_id);

執(zhí)行結果如下:

結果顯而易見,獲取到了最大的那條數(shù)據,功能已經實現(xiàn),但是子查詢的效率比較低,我們還有沒有更高效的方法呢?

使用 inner join 內連接,如下:

SQL如下:

select
	t1.id,
	t1.kpa_id,
	t1.progress
from
	org_kpa_result t1
inner join (
	select
		max(id) as id
	from
		org_kpa_result
	where
		kpa_id = 10
	group by
		kpa_id) t2 on
	t1.id = t2.id;

執(zhí)行結果如下:

查詢結果是一樣的,但是我們都知道 inner join 內連接的查詢效率要由于子查詢,故推薦使用該方法實現(xiàn)。

總結

到此這篇關于MySQL分組查詢獲取每組最新的一條數(shù)據的文章就介紹到這了,更多相關MySQL分組查詢每組最新一條數(shù)據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

昌邑市| 江津市| 台湾省| 富源县| 威海市| 亳州市| 峨眉山市| 丹阳市| 清原| 肃宁县| 浠水县| 和硕县| 和硕县| 盐边县| 泸西县| 泸西县| 广东省| 罗定市| 仁怀市| 溧水县| 宁明县| 壤塘县| 淅川县| 铜陵市| 巴彦县| 黔东| 镇坪县| 萍乡市| 榆树市| 盈江县| 当涂县| 观塘区| 施甸县| 兴宁市| 施甸县| 金堂县| 大同市| 阳春市| 建宁县| 隆子县| 湛江市|