Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Maklumat Terkini Menggunakan `GROUP BY` dan `MAX` (atau Alternatif) SQL?

Bagaimana untuk Mendapatkan Maklumat Terkini Menggunakan `GROUP BY` dan `MAX` (atau Alternatif) SQL?

Barbara Streisand
Lepaskan: 2024-12-26 02:38:11
asal
408 orang telah melayarinya

How to Retrieve the Latest Information Using SQL's `GROUP BY` and `MAX` (or Alternatives)?

Mendapatkan Maklumat Terkini Menggunakan SQL Group By & Max

Dalam sesetengah senario, adalah perlu untuk mendapatkan semula nilai terbaharu atau maksimum yang dikumpulkan mengikut lajur tertentu dalam set data. Satu pengagregatan biasa adalah untuk mencari maklumat terkini untuk gabungan nilai yang unik.

Pertimbangkan jadual berikut yang mengandungi senarai penggera:

id name alarmId alarmUnit alarmLevel
1 test voltage psu warning
2 test voltage psu ceasing
3 test voltage psu warning
4 test temp rcc warning
5 test temp rcc ceasing

Objektifnya adalah untuk mendapatkan hanya yang paling terkini maklumat untuk setiap gabungan alarmId dan alarmUnit. Hasil yang dijangkakan akan muncul seperti berikut:

id name alarmId alarmUnit alarmLevel
3 test voltage psu warning
5 test temp rcc ceasing

Beberapa pendekatan boleh digunakan untuk mencapai keputusan ini. Satu kaedah biasa melibatkan penggunaan fungsi ROW_NUMBER(), yang memberikan pangkat kepada setiap baris dalam setiap kumpulan. Pertanyaan berikut mengambil kesempatan daripada fungsi ini:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
    FROM mytable
) q
WHERE rn = 1
Salin selepas log masuk

Pertanyaan ini mengembalikan baris terbaharu untuk setiap gabungan alarmId dan alarmUnit.

Untuk pangkalan data yang tidak menyokong fungsi ROW_NUMBER() , seperti MySQL, pendekatan berbeza boleh digunakan:

SELECT mi.*
FROM (
    SELECT alarmId, alarmUnit, MAX(id) AS mid
    FROM mytable
    GROUP BY alarmId, alarmUnit
) mo
JOIN mytable mi
ON mi.id = mo.mid
Salin selepas log masuk

Pertanyaan ini menggunakan subkueri untuk mengenal pasti id maksimum untuk setiap gabungan alarmId dan alarmUnit, dan kemudian menggabungkan hasil dengan jadual asal untuk mendapatkan semula baris yang sepadan.

Dalam PostgreSQL versi 8.3 dan ke bawah, klausa DISTINCT ON boleh digunakan:

SELECT DISTINCT ON (alarmId, alarmUnit) *
FROM mytable
ORDER BY alarmId, alarmUnit, id DESC
Salin selepas log masuk

Pertanyaan ini mengembalikan baris pertama yang berbeza untuk setiap gabungan alarmId dan alarmUnit, yang memberikan maklumat terkini. Dengan memanfaatkan teknik ini, pembangun boleh mendapatkan semula nilai terkini daripada data mereka dengan cekap, membolehkan mereka membuat keputusan termaklum berdasarkan maklumat terkini yang tersedia.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Maklumat Terkini Menggunakan `GROUP BY` dan `MAX` (atau Alternatif) SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan