Mysql 存在多條數(shù)據(jù)時(shí)如何按時(shí)間取最新的那一組數(shù)據(jù)(思路詳解)
1、數(shù)據(jù)如下,獲取每個(gè)用戶最近的一次登錄數(shù)據(jù)

思路1:order by + group by
先根據(jù)UserId+LogInTime排序,再利用Group分組,即可得到每個(gè)User_Id的最新數(shù)據(jù)。
SELECT * FROM login_db l ORDER BY l.user_id, l.login_time DESC;
排序結(jié)果:

再對(duì)結(jié)果進(jìn)行分組:
SELECT * FROM (
SELECT *
FROM login_db l
ORDER BY l.user_id, l.login_time DESC
) lb
GROUP BY lb.user_id;得到的結(jié)果如下:

從結(jié)果可知,這并不是我們預(yù)期的結(jié)果。因MySql版本的原因,對(duì)Group By進(jìn)行了優(yōu)化,導(dǎo)致前面的排序不再生效,而是保留了排序前的結(jié)果。
為了使Group By根據(jù)我們排序后的結(jié)果進(jìn)行分組,需要加入關(guān)鍵字Limit告訴MySql需要進(jìn)行排序。
修改之后的語句如下:
SELECT * FROM (
SELECT *
FROM login_db l
ORDER BY l.user_id, l.login_time DESC LIMIT 100000
) lb
GROUP BY lb.user_id;得到了預(yù)期的結(jié)果:

從SQL中,不難看出,這個(gè)方法存在一個(gè)缺陷,就是必須要保證原始數(shù)據(jù)在limit范圍內(nèi),否則分組的結(jié)果就不會(huì)是全部的數(shù)據(jù),結(jié)果自然也是不能保證的。
思路2:多表關(guān)聯(lián)
利用多表關(guān)聯(lián),同一緯度(User_Id)下的登錄時(shí)間進(jìn)行比較,得出最近的時(shí)間。
select b1.*
from login_db b1
where (select COUNT(1)
from login_db b2
where b2.user_id = b1.user_id and b1.login_time <= b2.login_time) <= 1;
到此這篇關(guān)于Mysql 存在多條數(shù)據(jù)時(shí)如何按時(shí)間取最新的那一組數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Mysql 取最新數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何更改MySQL數(shù)據(jù)庫的編碼為utf8mb4
utf8mb4編碼是utf8編碼的超集,兼容utf8,并且能存儲(chǔ)4字節(jié)的表情字符。 這篇文章給大家介紹了更改MySQL數(shù)據(jù)庫的編碼為utf8mb4的相關(guān)知識(shí),感興趣的朋友一起看看吧2020-02-02
解決MySQL啟動(dòng)報(bào)錯(cuò):Warning:mysqld.service changed on 
文章提示MySQL啟動(dòng)時(shí)報(bào)錯(cuò),因服務(wù)配置文件已更改,需運(yùn)行`systemctl daemon-reload`重新加載配置,隨后重啟MySQL服務(wù)以解決此問題2025-09-09
MySQL MCP 服務(wù)器安裝配置最佳實(shí)踐
本文介紹MySQLMCP服務(wù)器的安裝配置方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下2025-06-06
MySQL對(duì)數(shù)據(jù)表已有表進(jìn)行分區(qū)表的實(shí)現(xiàn)
本文主要介紹對(duì)現(xiàn)有的一個(gè)表進(jìn)行創(chuàng)建分區(qū)表,并把數(shù)據(jù)遷移到新表,可以按時(shí)間來分區(qū),具有一定的參考價(jià)值,感興趣的可以了解一下2021-10-10
MySQL進(jìn)行分片合并的實(shí)現(xiàn)步驟
分片合并是指在分布式數(shù)據(jù)庫系統(tǒng)中,將不同分片上的查詢結(jié)果進(jìn)行整合,以獲得完整的查詢結(jié)果,下面就來具體介紹一下,感興趣的可以了解一下2025-08-08
如何用mysqldump進(jìn)行全量和時(shí)間點(diǎn)備份
這篇文章主要介紹了如何用mysqldump進(jìn)行全量和時(shí)間點(diǎn)備份,幫助大家更好的管理MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-08-08
MySQL大內(nèi)存配置方案 如my-medium.ini、my-huge.ini等
這篇文章主要介紹了MySQL大內(nèi)存配置方案 如my-medium.ini、my-huge.ini等,經(jīng)測(cè)試確實(shí)不錯(cuò),訪問mysql速度快了很多2014-08-08
Mysql數(shù)據(jù)庫清理binlog日志命令詳解
這篇文章主要給大家介紹了Mysql數(shù)據(jù)庫清理binlog日志命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

