Mengambil semula Rekod Terkini daripada Kumpulan menggunakan GROUP BY
Dalam SQL, klausa GROUP BY biasanya digunakan untuk mengumpulkan dan mengagregatkan data daripada jadual . Walau bagaimanapun, dalam senario tertentu, anda mungkin menghadapi keperluan untuk mendapatkan rekod terkini daripada setiap kumpulan dan bukannya yang paling lama.
Pertimbangkan contoh berikut:
SELECT * FROM messages GROUP BY from_id
Walaupun pertanyaan ini bertujuan untuk mengumpulkan rekod berdasarkan lajur from_id, ia memilih mesej tertua daripada setiap kumpulan kerana ia tidak mempunyai kriteria susunan cap masa. Untuk mendapatkan semula mesej terbaharu, kami perlu mengubah suai pertanyaan seperti berikut:
SELECT t1.* FROM messages t1 JOIN ( SELECT from_id, MAX(timestamp) AS latest_timestamp FROM messages GROUP BY from_id ) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.latest_timestamp
Dalam pertanyaan yang dioptimumkan ini, kami menggunakan subkueri untuk mengenal pasti nilai cap masa terkini dalam setiap kumpulan. Subquery mengira nilai cap masa maksimum untuk setiap from_id dan menyimpannya sebagai latest_timestamp.
Pertanyaan utama kemudiannya bergabung dengan jadual asal (mesej) dengan jadual subquery, memadankan rekod berdasarkan from_id. Selain itu, ia memastikan bahawa cap masa dalam jadual asal (t1.timestamp) sepadan dengan cap masa terkini untuk setiap kumpulan (t2.latest_timestamp).
Pertanyaan yang diperhalusi ini akan mendapatkan semula mesej terkini daripada setiap pengguna dengan berkesan, memberikan anda dengan hasil yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Terkini daripada Setiap Kumpulan Menggunakan Klausa SQL GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!