Rumah > pangkalan data > tutorial mysql > Bagaimana untuk mendapatkan rekod terakhir dalam setiap kumpulan di MySQL?

Bagaimana untuk mendapatkan rekod terakhir dalam setiap kumpulan di MySQL?

Susan Sarandon
Lepaskan: 2025-01-25 19:42:12
asal
909 orang telah melayarinya

How to Efficiently Retrieve the Last Record in Each Group in MySQL?

mysql: Mengekstrak entri akhir dari setiap kumpulan data

Operasi pangkalan data yang kerap melibatkan pengambilan rekod terbaru dalam setiap kumpulan data. Walaupun

sering digunakan, ia boleh membawa kepada isu -isu prestasi. GROUP BY

Pendekatan suboptimal

pertanyaan berikut, menggunakan perintah subquery dan menurun, percubaan ini:

<code class="language-sql">SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name</code>
Salin selepas log masuk
Kaedah ini tidak cekap kerana pertanyaan luar mengimbas keseluruhan jadual untuk setiap kumpulan, tanpa mengira alternatif yang lebih cekap.

penyelesaian yang dioptimumkan (MySQL 8.0)

MySQL 8.0 dan kemudian versi menawarkan fungsi tetingkap untuk operasi yang lebih baik.

dengan cekap mengenal pasti rekod terakhir dalam setiap kumpulan: ROW_NUMBER()

<code class="language-sql">WITH ranked_messages AS (
  SELECT m.*, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) AS rn
  FROM messages AS m
)
SELECT * FROM ranked_messages WHERE rn = 1;</code>
Salin selepas log masuk
pertanyaan ini berpangkat setiap baris dalam kumpulannya dan kemudian memilih hanya rekod teratas (terakhir) dari setiap.

alternatif (pra-mysql 8.0)

Untuk versi MySQL yang lebih tua (sebelum 8.0), pendekatan ini sesuai:

<code class="language-sql">SELECT m1.*
FROM messages m1 LEFT JOIN messages m2
 ON (m1.name = m2.name AND m1.id < m2.id)
WHERE m2.id IS NULL;</code>
Salin selepas log masuk
Ini menggunakan

untuk mencari baris tanpa lebih tinggi LEFT JOIN dalam kumpulan yang sama, dengan berkesan mengasingkan rekod terakhir dalam setiap. id

Pertimbangan Prestasi

Pertanyaan optimum sangat bergantung pada saiz data anda, pengedaran kumpulan, dan indeks yang sedia ada. Penanda aras senario khusus anda adalah penting untuk memilih penyelesaian yang paling berkesan.

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan rekod terakhir dalam setiap kumpulan di MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan