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)行排序。
修改之后的語(yǔ)句如下:
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 聯(lián)合索引與Where子句的優(yōu)化 提高數(shù)據(jù)庫(kù)運(yùn)行效率
網(wǎng)站系統(tǒng)上線至今,數(shù)據(jù)量已經(jīng)不知不覺(jué)上到500M,近8W記錄了。涉及數(shù)據(jù)庫(kù)操作的基本都是變得很慢了,這篇文章主要是說(shuō)明配置并不是數(shù)據(jù)庫(kù)操作慢的主要原因2012-01-01MySQL日期時(shí)間函數(shù)知識(shí)匯總
這篇文章主要介紹了MySQL日期時(shí)間函數(shù)知識(shí)匯總,這不同數(shù)據(jù)庫(kù)之間基本相同,只會(huì)有個(gè)別函數(shù)的差異。下文詳細(xì)介紹,需要的小伙伴可以參考一下2022-03-03超越MySQL 對(duì)流行數(shù)據(jù)庫(kù)進(jìn)行分支的知識(shí)小結(jié)
盡管MySQL是最受歡迎的程序之一,但是許多開(kāi)發(fā)人員認(rèn)為有必要將其拆分成其他項(xiàng)目,并且每個(gè)分支項(xiàng)目都有自己的專長(zhǎng)。該需求,以及 Oracle 對(duì)核心產(chǎn)品增長(zhǎng)緩慢的擔(dān)憂,導(dǎo)致出現(xiàn)了許多開(kāi)發(fā)人員感興趣的子項(xiàng)目和分支2012-01-01MySQL實(shí)現(xiàn)統(tǒng)計(jì)過(guò)去12個(gè)月每個(gè)月的數(shù)據(jù)信息
這篇文章主要介紹了MySQL實(shí)現(xiàn)統(tǒng)計(jì)過(guò)去12個(gè)月每個(gè)月的數(shù)據(jù)信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Navicat出現(xiàn)無(wú)法遠(yuǎn)程連接MySql服務(wù)器問(wèn)題的解決辦法
這篇文章主要介紹了Navicat出現(xiàn)無(wú)法遠(yuǎn)程連接MySql服務(wù)器問(wèn)題的解決辦法,文章通過(guò)思路判斷出現(xiàn)問(wèn)題的情況,然后進(jìn)行逐一排查,確定問(wèn)題出現(xiàn)的原因并給出解決辦法,本文對(duì)此問(wèn)題的解決介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08