Rumah > Artikel > pangkalan data > Bagaimana untuk Mendapatkan Rekod Versi Tertinggi untuk Setiap ID dalam Klausa GROUP BY MySQL?
Mengawal Baris Dikembalikan dalam Kumpulan MySQL Oleh
Dalam MySQL, mendapatkan semula baris yang dikehendaki daripada sekumpulan data boleh menimbulkan cabaran. Artikel ini meneroka cara untuk mewujudkan kawalan ke atas baris yang dikembalikan dalam kumpulan mengikut senario.
Masalah:
Jadual pangkalan data mengandungi berbilang versi rekod yang dikenal pasti oleh lajur id dan lajur version_id. Matlamatnya adalah untuk menanyakan jadual dan mengembalikan hanya rekod dengan version_id tertinggi untuk setiap id unik.
Penyelesaian 1 (Pendekatan Subkueri):
Satu pendekatan melibatkan penggunaan subquery untuk menyusun baris berdasarkan version_id dalam susunan menurun:
SELECT * FROM (SELECT * FROM table ORDER BY version_id DESC) t1 GROUP BY t1.id
Ini kaedah berkesan mencipta jadual sementara, mengisih data dan kemudian mengumpulkannya untuk mendapatkan semula baris yang diingini.
Penyelesaian 2 (Menggunakan Maks dan Gabungan):
Kaedah lain menggunakan fungsi MAX() dan bergabung untuk mencapai hasil yang sama:
SELECT * FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1 INNER JOIN table t2 ON t2.id = t1.id AND t1.version_id = t2.version_id
Pendekatan ini mula-mula mengenal pasti version_id maksimum untuk setiap id dan kemudian menyertai jadual asal untuk mendapatkan rekod lengkap dengan versi tertinggi.
Kebaikan dan Pertimbangan:
Pendekatan subquery boleh mencipta jadual sementara dalam ingatan, yang mungkin memberi kesan kepada prestasi untuk set data yang besar. Sebaliknya, ia boleh menjadi lebih mudah untuk difahami dan dilaksanakan.
Kaedah berasaskan gabungan secara umumnya lebih cekap untuk set data yang lebih besar kerana ia mengelak daripada membuat jadual sementara. Walau bagaimanapun, ia menganggap kehadiran indeks pada lajur (id, version_id) untuk prestasi optimum.
Kedua-dua penyelesaian memerlukan indeks yang sesuai untuk pelaksanaan yang cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Versi Tertinggi untuk Setiap ID dalam Klausa GROUP BY MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!