ホームページ > データベース > mysql チュートリアル > SQL の「GROUP BY」と「MAX」(または代替手段)を使用して最新の情報を取得するにはどうすればよいですか?

SQL の「GROUP BY」と「MAX」(または代替手段)を使用して最新の情報を取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-26 02:38:11
オリジナル
341 人が閲覧しました

How to Retrieve the Latest Information Using SQL's `GROUP BY` and `MAX` (or Alternatives)?

SQL Group By & Max を使用した最新情報の取得

一部のシナリオでは、グループ化された最新値または最大値を取得する必要があります。データセット内の特定の列ごとに。このような一般的な集約の 1 つは、値の一意の組み合わせに関する最新情報を見つけることです。

アラームのリストを含む次の表について考えてみましょう:

id name alarmId alarmUnit alarmLevel
1 test voltage psu warning
2 test voltage psu ceasing
3 test voltage psu warning
4 test temp rcc warning
5 test temp rcc ceasing

目的は、最新のもののみを取得することです。アラーム ID とアラームユニットの組み合わせごとの情報。期待される結果は次のようになります。

id name alarmId alarmUnit alarmLevel
3 test voltage psu warning
5 test temp rcc ceasing

この結果を達成するには、いくつかのアプローチを利用できます。一般的な方法の 1 つは、各グループ内の各行にランクを割り当てる ROW_NUMBER() 関数の使用です。次のクエリは、この関数を利用しています。

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
    FROM mytable
) q
WHERE rn = 1
ログイン後にコピー

このクエリは、alarmId とalarmUnit の組み合わせごとに最新の行を返します。

ROW_NUMBER() 関数をサポートしていないデータベースの場合MySQL など、別のアプローチを使用することもできます。

SELECT mi.*
FROM (
    SELECT alarmId, alarmUnit, MAX(id) AS mid
    FROM mytable
    GROUP BY alarmId, alarmUnit
) mo
JOIN mytable mi
ON mi.id = mo.mid
ログイン後にコピー

このクエリはサブクエリを利用して、アラーム ID とアラームユニットの各組み合わせの最大 ID を取得し、その結果を元のテーブルと結合して、対応する行を取得します。

PostgreSQL バージョン 8.3 以前では、DISTINCT ON 句を利用できます。

SELECT DISTINCT ON (alarmId, alarmUnit) *
FROM mytable
ORDER BY alarmId, alarmUnit, id DESC
ログイン後にコピー

このクエリは、alarmId と AlarmUnit の組み合わせごとに最初の個別の行を返し、これにより最新の情報が効果的に提供されます。これらのテクニックを活用することで、開発者はデータから最新の値を効率的に取得でき、入手可能な最新情報に基づいて十分な情報に基づいた意思決定を行うことができます。

以上がSQL の「GROUP BY」と「MAX」(または代替手段)を使用して最新の情報を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート