欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql分組查詢(xún)每組最新的一條數(shù)據(jù)的五種實(shí)現(xiàn)過(guò)程

 更新時(shí)間:2024年11月20日 10:53:29   作者:?jiǎn)痰じ鉏T  
本文介紹了五種在MySQL中獲取每個(gè)分組最新一條數(shù)據(jù)的方法,包括子查詢(xún)和JOIN、窗口函數(shù)、變量、聚合函數(shù)和子查詢(xún)以及使用DISTINCT關(guān)鍵字,推薦使用子查詢(xún)和JOIN操作或窗口函數(shù),避免使用變量

Mysql分組查詢(xún)每組最新的一條數(shù)據(jù)

代碼示例:

在MySQL中,獲取每個(gè)分組的最新一條數(shù)據(jù)是一個(gè)常見(jiàn)的查詢(xún)需求。

以下是五種實(shí)現(xiàn)該需求的方法:

1.使用子查詢(xún)和JOIN

通過(guò)子查詢(xún)先找出每個(gè)分組的最新記錄的日期,然后通過(guò)JOIN操作連接原表來(lái)獲取完整的記錄。

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()來(lái)實(shí)現(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.使用變量(不推薦)

雖然不推薦使用變量來(lái)處理這類(lèi)問(wèn)題,但作為一種可能的方法,可以通過(guò)自連接和變量來(lái)實(shí)現(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.通過(guò)聚合函數(shù)和子查詢(xún)

使用聚合函數(shù)MAX()來(lái)獲取每個(gè)分組的最新時(shí)間,然后通過(guò)子查詢(xún)來(lái)獲取對(duì)應(yīng)的完整記錄。

SELECT *
FROM orders
WHERE (customer_id, order_date) IN (
    SELECT customer_id, MAX(order_date)
    FROM orders
    GROUP BY customer_id
);

5.通過(guò)DISTINCT關(guān)鍵字

通過(guò)在子查詢(xún)中使用DISTINCT關(guān)鍵字來(lái)打破MySQL語(yǔ)句優(yōu)化,使排序生效。

SELECT *
FROM (
    SELECT DISTINCT * FROM orders ORDER BY customer_id, order_date DESC
) AS latest
GROUP BY customer_id;

以上方法中,推薦使用子查詢(xún)和JOIN操作或者窗口函數(shù),這些方法更清晰、效率更高。

使用變量的方法雖然可行,但通常不是最佳實(shí)踐。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL中的約束Constraint解讀

    MySQL中的約束Constraint解讀

    這篇文章詳細(xì)介紹了MySQL中的各種約束類(lèi)型,包括非空約束、默認(rèn)約束、檢查約束、唯一約束和主鍵約束,以及外鍵約束,每種約束類(lèi)型都有其特定的用途和語(yǔ)法,并且可以是列級(jí)約束或表級(jí)約束,文章還探討了如何給約束命名、刪除約束
    2025-01-01
  • mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程

    mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Mysql查詢(xún)時(shí)間區(qū)間日期列表實(shí)例代碼

    Mysql查詢(xún)時(shí)間區(qū)間日期列表實(shí)例代碼

    最近常用到mysql的日期范圍搜索,下面這篇文章主要給大家介紹了關(guān)于Mysql查詢(xún)時(shí)間區(qū)間日期列表的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • mysql 數(shù)據(jù)插入優(yōu)化方法之concurrent_insert

    mysql 數(shù)據(jù)插入優(yōu)化方法之concurrent_insert

    在MyISAM里讀寫(xiě)操作是串行的,但當(dāng)對(duì)同一個(gè)表進(jìn)行查詢(xún)和插入操作時(shí),為了降低鎖競(jìng)爭(zhēng)的頻率,根據(jù)concurrent_insert的設(shè)置,MyISAM是可以并行處理查詢(xún)和插入的
    2021-07-07
  • 阿里云ECS centos6.8下安裝配置MySql5.7的教程

    阿里云ECS centos6.8下安裝配置MySql5.7的教程

    阿里云默認(rèn)yum命令下的MySQL是5.17****,安裝mysql5.7之前先卸載以前的版本。下面通過(guò)本文給大家介紹阿里云ECS centos6.8下安裝配置MySql5.7的教程,需要的的朋友參考下吧
    2017-07-07
  • MYSQL隨機(jī)抽取查詢(xún) MySQL Order By Rand()效率問(wèn)題

    MYSQL隨機(jī)抽取查詢(xún) MySQL Order By Rand()效率問(wèn)題

    MYSQL隨機(jī)抽取查詢(xún):MySQL Order By Rand()效率問(wèn)題一直是開(kāi)發(fā)人員的常見(jiàn)問(wèn)題,俺們不是DBA,沒(méi)有那么牛B,所只能慢慢研究咯,最近由于項(xiàng)目問(wèn)題,需要大概研究了一下MYSQL的隨機(jī)抽取實(shí)現(xiàn)方法
    2011-11-11
  • Linux下安裝MySQL教程

    Linux下安裝MySQL教程

    上一篇文章詳細(xì)介紹windows下MySQL安裝教程,這篇就從最基本的安裝MySQL-Linux環(huán)境開(kāi)始,文章為繞MySQL安裝展開(kāi)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 解決myBatis中刪除條件的拼接問(wèn)題

    解決myBatis中刪除條件的拼接問(wèn)題

    這篇文章主要介紹了解決myBatis中刪除條件的拼接問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • mysql連接錯(cuò)誤2013的問(wèn)題及解決

    mysql連接錯(cuò)誤2013的問(wèn)題及解決

    這篇文章主要介紹了mysql連接錯(cuò)誤2013的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問(wèn)題

    Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問(wèn)題

    這篇文章主要介紹了Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論