Menentukan Rekod Terkini Dalam Kumpulan melalui KUMPULAN OLEH
Dalam senario pangkalan data yang melibatkan berbilang rekod dengan kriteria pengelompokan yang serupa, tugas biasa adalah untuk mendapatkan semula rekod terkini bagi setiap kumpulan. Ini ditunjukkan dalam platform pemesejan, di mana mesej terbaharu daripada setiap pengguna dikehendaki.
Percubaan dan Kelemahan Awal
Pendekatan awal melibatkan penggunaan klausa GROUP BY untuk agregat rekod ke dalam kumpulan yang berbeza, seperti yang dilihat dalam pertanyaan:
SELECT * FROM messages GROUP BY from_id
Walau bagaimanapun, pertanyaan ini mendapatkan semula mesej tertua dalam setiap kumpulan dan bukannya yang terbaharu.
Penyelesaian Pertanyaan
Kepada mendapatkan rekod terkini bagi setiap kumpulan, pendekatan yang lebih canggih diperlukan. Ini melibatkan:
Subquery: Tentukan nilai cap masa terkini dalam setiap kumpulan menggunakan subquery berikut:
SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id
Sertai subquery: Sertai jadual mesej asal dengan subkueri, sepadan dengan from_id dan lajur cap masa di mana ia sepadan.
SELECT t1.* FROM messages t1 JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
Pertanyaan ini menghasilkan mesej terkini untuk setiap from_id yang berbeza dalam jadual mesej, menangani kebimbangan awal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Rekod Terkini dengan Cekap untuk Setiap Kumpulan dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!