Maison >base de données >tutoriel mysql >Comment sélectionner la valeur maximale dans chaque groupe dans SQL ?

Comment sélectionner la valeur maximale dans chaque groupe dans SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-29 18:24:11644parcourir

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

SQL Group By avec sélection de valeur maximale

En SQL, la clause GROUP BY nous permet de regrouper les lignes en fonction des colonnes spécifiées. Lorsqu'il est utilisé avec la fonction MAX, il peut être utilisé pour sélectionner la plus grande valeur de chaque groupe.

Énoncé du problème

Supposons que vous ayez un tableau contenant les données suivantes :

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

Vous souhaitez récupérer uniquement les informations les plus récentes pour chaque groupe défini par AlarmID et AlarmUnit. Le résultat attendu devrait être :

ID Name AlarmID AlarmUnit AlarmLevel
3 Test Voltage PSU Warning
5 Test Temperature RCC Ceased

Solution

Pour résoudre ce problème, nous pouvons utiliser la requête suivante dans Oracle, SQL Server 2005 et 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

Pour MySQL, la requête est :

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

Pour PostgreSQL 8.3 et ci-dessous, nous pouvons utiliser :

SELECT  DISTINCT ON (alarmId, alarmUnit) *
FROM    TableName
ORDER BY
        alarmId, alarmUnit, id DESC

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn