最新国产好看的视频,伊人天堂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)文章

最新評論

阿巴嘎旗| 甘南县| 昌乐县| 商都县| 汉川市| 阆中市| 阿拉善右旗| 棋牌| 吉木萨尔县| 元谋县| 安达市| 临朐县| 佛教| 衡阳县| 开鲁县| 独山县| 岚皋县| 静宁县| 新邵县| 祁连县| 凤冈县| 务川| 商水县| 根河市| 长治市| 丰县| 临颍县| 攀枝花市| 疏附县| 余江县| 武宁县| 鹰潭市| 阿城市| 调兵山市| 恩平市| 大化| 体育| 乐业县| 弋阳县| 莱阳市| 南昌县|