Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan PID Baris Terkini untuk Setiap RID Unik dalam MySQL Menggunakan MAX() dan GROUP BY?

Bagaimana untuk Mendapatkan PID Baris Terkini untuk Setiap RID Unik dalam MySQL Menggunakan MAX() dan GROUP BY?

Patricia Arquette
Patricia Arquetteasal
2024-12-31 01:29:12523semak imbas

How to Retrieve the PID of the Latest Row for Each Unique RID in MySQL Using MAX() and GROUP BY?

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:

  • pid (kunci utama autokenaikan)
  • cap masa (cap masa dengan nilai lalai)
  • kos (integer)
  • rid (integer)

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn