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.
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 |
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!