在 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中文网其他相关文章!