Dalam SQL, klausa GROUP BY membenarkan kami mengumpulkan baris berdasarkan lajur yang ditentukan. Apabila digunakan dengan fungsi MAX, ia boleh digunakan untuk memilih nilai terbesar daripada setiap kumpulan.
Andaikan anda mempunyai jadual yang mengandungi data berikut:
ID | Name | AlarmID | AlarmUnit | AlarmLevel |
---|---|---|---|---|
1 | Test | Voltage | PSU | Warning |
2 | Test | Voltage | PSU | Ceased |
3 | Test | Voltage | PSU | Warning |
4 | Test | Temperature | RCC | Warning |
5 | Test | Temperature | RCC | Ceased |
Anda hanya mahu mendapatkan maklumat terkini untuk setiap kumpulan yang ditakrifkan oleh AlarmID dan AlarmUnit. Output yang dijangkakan hendaklah:
ID | Name | AlarmID | AlarmUnit | AlarmLevel |
---|---|---|---|---|
3 | Test | Voltage | PSU | Warning |
5 | Test | Temperature | RCC | Ceased |
Untuk menyelesaikan masalah ini, kita boleh menggunakan pertanyaan berikut dalam Oracle, SQL Server 2005 dan PostgreSQL 8.4 :
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn FROM TableName ) q WHERE rn = 1
Untuk MySQL, pertanyaannya ialah:
SELECT mi.* FROM ( SELECT alarmId, alarmUnit, MAX(id) AS mid FROM TableName GROUP BY alarmId, alarmUnit ) mo JOIN TableName mi ON mi.id = mo.mid
Untuk PostgreSQL 8.3 dan ke bawah, kita boleh menggunakan:
SELECT DISTINCT ON (alarmId, alarmUnit) * FROM TableName ORDER BY alarmId, alarmUnit, id DESC
Atas ialah kandungan terperinci Bagaimana untuk Memilih Nilai Maksimum dalam Setiap Kumpulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!