Mysql分組查詢每組最新的一條數(shù)據(jù)的五種實現(xiàn)過程
Mysql分組查詢每組最新的一條數(shù)據(jù)
代碼示例:
在MySQL中,獲取每個分組的最新一條數(shù)據(jù)是一個常見的查詢需求。
以下是五種實現(xiàn)該需求的方法:
1.使用子查詢和JOIN
通過子查詢先找出每個分組的最新記錄的日期,然后通過JOIN操作連接原表來獲取完整的記錄。
SELECT o.* FROM orders o INNER JOIN ( SELECT customer_id, MAX(order_date) AS latest_date FROM orders GROUP BY customer_id ) latest_orders ON o.customer_id = latest_orders.customer_id AND o.order_date = latest_orders.latest_date;
2.使用窗口函數(shù)(MySQL 8.0+)
如果你使用的是MySQL 8.0或更高版本,可以利用窗口函數(shù)ROW_NUMBER()
來實現(xiàn)。
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn FROM orders ) ranked_orders WHERE rn = 1;
3.使用變量(不推薦)
雖然不推薦使用變量來處理這類問題,但作為一種可能的方法,可以通過自連接和變量來實現(xiàn)。
SELECT t1.* FROM orders t1 LEFT JOIN orders t2 ON t1.customer_id = t2.customer_id AND t1.order_date < t2.order_date WHERE t2.customer_id IS NULL;
4.通過聚合函數(shù)和子查詢
使用聚合函數(shù)MAX()
來獲取每個分組的最新時間,然后通過子查詢來獲取對應的完整記錄。
SELECT * FROM orders WHERE (customer_id, order_date) IN ( SELECT customer_id, MAX(order_date) FROM orders GROUP BY customer_id );
5.通過DISTINCT關(guān)鍵字
通過在子查詢中使用DISTINCT
關(guān)鍵字來打破MySQL語句優(yōu)化,使排序生效。
SELECT * FROM ( SELECT DISTINCT * FROM orders ORDER BY customer_id, order_date DESC ) AS latest GROUP BY customer_id;
以上方法中,推薦使用子查詢和JOIN操作或者窗口函數(shù),這些方法更清晰、效率更高。
使用變量的方法雖然可行,但通常不是最佳實踐。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05mysql 數(shù)據(jù)插入優(yōu)化方法之concurrent_insert
在MyISAM里讀寫操作是串行的,但當對同一個表進行查詢和插入操作時,為了降低鎖競爭的頻率,根據(jù)concurrent_insert的設(shè)置,MyISAM是可以并行處理查詢和插入的2021-07-07阿里云ECS centos6.8下安裝配置MySql5.7的教程
阿里云默認yum命令下的MySQL是5.17****,安裝mysql5.7之前先卸載以前的版本。下面通過本文給大家介紹阿里云ECS centos6.8下安裝配置MySql5.7的教程,需要的的朋友參考下吧2017-07-07MYSQL隨機抽取查詢 MySQL Order By Rand()效率問題
MYSQL隨機抽取查詢:MySQL Order By Rand()效率問題一直是開發(fā)人員的常見問題,俺們不是DBA,沒有那么牛B,所只能慢慢研究咯,最近由于項目問題,需要大概研究了一下MYSQL的隨機抽取實現(xiàn)方法2011-11-11Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問題
這篇文章主要介紹了Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06