Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mendapatkan Kembali Baris Terakhir setiap Kumpulan dengan Cekap dalam MySQL?

Bagaimana untuk Mendapatkan Kembali Baris Terakhir setiap Kumpulan dengan Cekap dalam MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 15:19:01220semak imbas

How to Efficiently Retrieve the Last Row per Group in MySQL?

Mendapatkan semula Baris 'Terakhir' bagi setiap Kumpulan dengan MySQL

Masalah:

Cari kaedah yang lebih cekap untuk mendapatkan semula baris terakhir untuk setiap kumpulan dalam jadual MySQL, menggunakan pertanyaan yang serupa kepada:

select * 
    from foo as a
    where a.id = (select max(id) from foo where uid = a.uid group by uid)
    group by uid;

Potensi Penyelesaian:

Pertimbangkan pertanyaan alternatif ini:

SELECT t1.* FROM foo t1
  LEFT JOIN foo t2
    ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;

Penjelasan:

Pertanyaan ini Kiri Menyertai setiap baris dalam jadual dengan penggantinya berdasarkan lajur ID. Jika tiada pengganti wujud (iaitu, ia adalah baris terakhir dalam kumpulan), lajur t2.id akan menjadi NULL. Dengan menapis untuk NULL, kami mengasingkan baris terakhir setiap kumpulan dengan berkesan.

Nota Tambahan:

Gunakan EXPLAIN untuk menganalisis prestasi pertanyaan bagi pertanyaan asal dan alternatif penyelesaian.

Kaedah ini amat berguna untuk set data besar dan kumpulan kompleks. Untuk kes yang lebih mudah, pendekatan lain mungkin lebih cekap.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Baris Terakhir setiap Kumpulan dengan Cekap dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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