mysql分組后如何每個取最新的一條記錄
mysql分組后每個取最新的一條記錄
在MySQL中,若要從一個分組中獲取每組的最新一條記錄(通?;跁r間戳或其他遞增的列),可以使用子查詢或者窗口函數(shù)(如果MySQL版本支持)。
以下是兩種不同的實現(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;在這個查詢中:
your_table是你要查詢的表名。id是用于分組的字段。timestamp是用于確定哪條記錄是“最新”的時間戳字段。
方法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;在這個查詢中:
other_columns代表你需要選擇的其他列。ROW_NUMBER()函數(shù)會為每個分組內(nèi)的行分配一個唯一的數(shù)字,按timestamp降序排列,最新的記錄會得到rn = 1。PARTITION BY id指定了分組依據(jù)。ORDER BY timestamp DESC確保了在每個分組內(nèi)部按照時間戳降序排序。
這兩種方法都可以確保每個分組中只選擇最新的一條記錄。
- 在方法1中,先通過子查詢找到每個分組中的最新日期,然后通過連接操作獲取對應(yīng)的記錄。
- 在方法2中,使用窗口函數(shù)ROW_NUMBER()對每個分組內(nèi)的記錄進行排序,并給每條記錄分配一個行號,然后篩選出行號為1的記錄。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(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)緯度距離問題的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
MySQL?Prepared?Statement?預處理的操作方法
預處理語句是一種在數(shù)據(jù)庫管理系統(tǒng)中使用的編程概念,用于執(zhí)行對數(shù)據(jù)庫進行操作的?SQL?語句,這篇文章主要介紹了MySQL?Prepared?Statement?預處理?,需要的朋友可以參考下2024-08-08
MySQL故障切換筆記之應(yīng)用無感知設(shè)計詳解
這篇文章主要給大家介紹了關(guān)于MySQL故障切換筆記之應(yīng)用無感知設(shè)計的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mysql具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-08-08

