首页 >数据库 >mysql教程 >如何在SQL中选择每个组内的最大值?

如何在SQL中选择每个组内的最大值?

Patricia Arquette
Patricia Arquette原创
2024-12-29 18:24:11664浏览

How to Select the Maximum Value within Each Group in SQL?

具有最大值选择的 SQL Group By

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn