Penyata Masalah
Bagaimana seseorang boleh mendapatkan rekod dengan yang tertinggi dengan cekap atau nilai terendah untuk medan tertentu dalam setiap kumpulan yang ditakrifkan oleh yang lain medan?
Penyelesaian Menggunakan Left Outer Join
Untuk mendapatkan semula rekod dengan nilai tertinggi untuk medan OrderField dalam setiap GroupId, gunakan pertanyaan berikut:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
Faedah Menyertai Pendekatan
Alternatif
Jika data adalah kecil atau pelaksanaan khusus enjin pangkalan data yang anda gunakan kurang dioptimumkan untuk gabungan, anda boleh mempertimbangkan alternatif seperti sebagai:
Ketidakcekapan Penggunaan Kaedah @Rank Variable
Kaedah yang anda huraikan menggunakan pembolehubah @Rank, seperti yang ditulis pada asalnya, tidak akan berfungsi dengan betul kerana pembolehubah @Rank tidak ditetapkan semula kepada sifar selepas memproses jadual pertama. Untuk membetulkannya, anda perlu menambah jadual terbitan lain untuk menetapkan semula @Rank kepada sifar sebelum memproses jadual kedua. Walau bagaimanapun, pendekatan ini masih tidak cekap berbanding pendekatan bergabung.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Rekod Tertinggi atau Terendah dengan Cekap bagi setiap Kumpulan dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!