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 中国語 Web サイトの他の関連記事を参照してください。