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

MySQL使用group by分組查詢每組最新的一筆數(shù)據(jù)實(shí)現(xiàn)方式

 更新時(shí)間:2025年06月29日 13:19:20   作者:yuhuofei2021  
這篇文章主要介紹了MySQL使用group by分組查詢每組最新的一筆數(shù)據(jù)實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問題來源

今天遇到一個(gè)查詢數(shù)據(jù)庫數(shù)據(jù)的問題:要獲取每個(gè)分組最新的一筆數(shù)據(jù),并將每個(gè)分組最新的一筆數(shù)據(jù)重新組成一個(gè)新的列表

這種場景,當(dāng)然是想到了分組查詢,使用 group by,思路也很清晰:

  • 將所有記錄根據(jù)時(shí)間 order by desc ,倒敘排列一遍
  • 將第1步中的數(shù)據(jù),group by 一下,就能得到想要的列表

按這個(gè)思路,得到的 sql 語句如下:

select *
from (
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
) t
group by t.department;

思路沒有問題,語句也沒有問題,但執(zhí)行后,卻怎么也得不到想要的結(jié)果

這里有一個(gè)大坑,那就是從 mysql 5.7 開始,對于子查詢的排序,其實(shí)是不生效的,意思就是下面這個(gè)子查詢語句的排序,對于整體而言無效,所以最終得不到想要的結(jié)果

select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc

解決方式

方式一

還是上面的思路,只要加上一個(gè) limit 就可以拿到想要的結(jié)果了,語句如下:

select *
from (
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
limit 1000
) t
group by t.department;

這個(gè)就算是在 mysql 5.7 及更高的版本也能跑,親測可用。

至于 limit 后面的數(shù)字是 1000 還是 10000,可以根據(jù)具體的業(yè)務(wù)場景設(shè)置

方式二

聯(lián)表查詢,實(shí)現(xiàn)的語句如下:

select
	*
from
	(
	select
		department,
		max(create_time) as date_time
	from
		company_info
	where
		company_name = 'xxxxx科技有限公司'
	group by
		department
) a
left join company_info t 
on
	t.department = a.department
	and t.create_time = a.date_time;

使用 max 函數(shù)獲取最新的 create_time 和 department,并分組,然后作為一張表 a 和原來的表 t 進(jìn)行聯(lián)查

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

增城市| 会昌县| 珠海市| 伊金霍洛旗| 新乡市| 马关县| 昔阳县| 都安| 沾化县| 资兴市| 枝江市| 福安市| 三穗县| 武定县| 青河县| 留坝县| 达尔| 长阳| 黄陵县| 保山市| 平果县| 安溪县| 晋中市| 扶风县| 资源县| 新民市| 和硕县| 义马市| 元朗区| 大英县| 兰考县| 丰原市| 永州市| 兴隆县| 厦门市| 清徐县| 嘉祥县| 资阳市| 若羌县| 新绛县| 绥化市|