MySQL Query: MAX() Group By
Dalam MySQL, klausa GROUP BY digunakan untuk menggabungkan baris dengan nilai yang sama dalam yang ditentukan kumpulan, manakala fungsi MAX() mengembalikan nilai maksimum dalam lajur tertentu dalam a kumpulan.
Pernyataan Masalah
Diberikan jadual dengan lajur berikut:
Matlamatnya ialah untuk mendapatkan semula PID baris terkini untuk setiap rid unik. Output yang dijangkakan hendaklah:
pid | MAX(timestamp) | rid |
---|---|---|
5 | 2011-04-14 01:06:06 | 1 |
3 | 2011-04-14 01:05:41 | 2 |
7 | 2011-04-14 01:14:14 | 3 |
Pertanyaan Awal
Pertanyaan berikut telah cuba menyelesaikan masalah:
SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
Walau bagaimanapun, pertanyaan ini mengembalikan PID yang salah, kerana ia memilih PID untuk kejadian pertama nilai rid dan bukannya yang terkini cap masa.
Pertanyaan Penyelesaian
Untuk mendapatkan hasil yang diingini, pertanyaan berikut boleh digunakan:
SELECT pid, MAX(timestamp), rid FROM ( SELECT pid, timestamp, rid, ROW_NUMBER() OVER (PARTITION BY rid ORDER BY timestamp DESC) AS rn FROM theTable ) AS subquery WHERE rn = 1 GROUP BY rid
Penjelasan
Pertanyaan ini menggunakan subkueri untuk menentukan kedudukan baris bagi setiap penyingkiran dalam tertib menurun cap masa menggunakan fungsi ROW_NUMBER(). Lajur rn memberikan kedudukan kepada setiap baris, dengan 1 mewakili baris dengan cap masa terkini untuk setiap penyingkiran.
Pertanyaan luar kemudian menapis hasil untuk hanya memasukkan baris dengan rn sama dengan 1, memastikan hanya baris terkini untuk setiap rid dipilih. Nilai pid, MAX(cap masa) dan rid dikumpulkan mengikut rid untuk menghasilkan output yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan PID Baris Terkini untuk Setiap RID Unik dalam MySQL Menggunakan MAX() dan GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!