在 SQL 中,GROUP BY 子句允許我們根據指定的列對行進行分組。與 MAX 函數一起使用時,可用於選擇每組中的最大值。
假設您有一個包含以下資料的表:
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 |
您只想擷取 AlarmID 和 AlarmUnit 定義的每個群組的最新資訊。預期輸出應該是:
ID | Name | AlarmID | AlarmUnit | AlarmLevel |
---|---|---|---|---|
3 | Test | Voltage | PSU | Warning |
5 | Test | Temperature | RCC | Ceased |
要解決這個問題,我們可以在Oracle、SQL Server 2005 和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
對於MySQL,查詢是:
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
對於PostgreSQL 8.3及以下版本,我們可以使用:
SELECT DISTINCT ON (alarmId, alarmUnit) * FROM TableName ORDER BY alarmId, alarmUnit, id DESC
以上是如何在SQL中選擇每個群組內的最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!