mysql分組后如何每個(gè)取最新的一條記錄
mysql分組后每個(gè)取最新的一條記錄
在MySQL中,若要從一個(gè)分組中獲取每組的最新一條記錄(通常基于時(shí)間戳或其他遞增的列),可以使用子查詢或者窗口函數(shù)(如果MySQL版本支持)。
以下是兩種不同的實(shí)現(xiàn)方法:
方法1
使用子查詢和LIMIT子句
SELECT t1.*
FROM your_table t1
INNER JOIN (
SELECT id, MAX(timestamp) AS max_timestamp
FROM your_table
GROUP BY id
) t2 ON t1.id = t2.id AND t1.timestamp = t2.max_timestamp;在這個(gè)查詢中:
your_table是你要查詢的表名。id是用于分組的字段。timestamp是用于確定哪條記錄是“最新”的時(shí)間戳字段。
方法2
使用窗口函數(shù)ROW_NUMBER()(如果MySQL 8.0+)
SELECT id, other_columns, timestamp
FROM (
SELECT id, other_columns, timestamp,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY timestamp DESC) as rn
FROM your_table
) t
WHERE rn = 1;在這個(gè)查詢中:
other_columns代表你需要選擇的其他列。ROW_NUMBER()函數(shù)會為每個(gè)分組內(nèi)的行分配一個(gè)唯一的數(shù)字,按timestamp降序排列,最新的記錄會得到rn = 1。PARTITION BY id指定了分組依據(jù)。ORDER BY timestamp DESC確保了在每個(gè)分組內(nèi)部按照時(shí)間戳降序排序。
這兩種方法都可以確保每個(gè)分組中只選擇最新的一條記錄。
- 在方法1中,先通過子查詢找到每個(gè)分組中的最新日期,然后通過連接操作獲取對應(yīng)的記錄。
- 在方法2中,使用窗口函數(shù)ROW_NUMBER()對每個(gè)分組內(nèi)的記錄進(jìn)行排序,并給每條記錄分配一個(gè)行號,然后篩選出行號為1的記錄。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows下修改mysql的data文件夾存放位置的方法
這篇文章主要介紹了在Windows下修改mysql的data文件夾存放位置的方法,需要的朋友可以參考下2014-03-03
SQL語句執(zhí)行深入講解(MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序)
這篇文章主要給大家介紹了SQL語句執(zhí)行的相關(guān)內(nèi)容,文中一步步給大家深入的講解,包括MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序,需要的朋友可以參考下2019-01-01
使用MySQL的geometry類型處理經(jīng)緯度距離問題的方法
這篇文章主要介紹了使用MySQL的geometry類型處理經(jīng)緯度距離問題的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
MySQL?Prepared?Statement?預(yù)處理的操作方法
預(yù)處理語句是一種在數(shù)據(jù)庫管理系統(tǒng)中使用的編程概念,用于執(zhí)行對數(shù)據(jù)庫進(jìn)行操作的?SQL?語句,這篇文章主要介紹了MySQL?Prepared?Statement?預(yù)處理?,需要的朋友可以參考下2024-08-08
MySQL故障切換筆記之應(yīng)用無感知設(shè)計(jì)詳解
這篇文章主要給大家介紹了關(guān)于MySQL故障切換筆記之應(yīng)用無感知設(shè)計(jì)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08

