ホームページ >データベース >mysql チュートリアル >PostgreSQL で各 ID の最後の行を効率的に取得するにはどうすればよいですか?

PostgreSQL で各 ID の最後の行を効率的に取得するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-28 17:09:11400ブラウズ

How to Efficiently Retrieve the Last Row for Each ID in PostgreSQL?

PostgreSQL: 各 ID の最後の行の取得

問題:

次のデータがある場合、抽出したいとしますそれぞれの一意の最後のレコードID:

id    date          another_info
1     2014-02-01         kjkj
1     2014-03-11         ajskj
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-02-01         sfdg
3     2014-06-12         fdsA

望ましい結果:

id    date          another_info
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-06-12         fdsA

解決策:

を達成するには 2 つの効率的な方法がありますPostgreSQL のこれ:

方法 1: DISTINCT ON 演算子の使用

Postgres には DISTINCT ON 演算子が用意されており、これを使用すると、1 つ以上の列に基づいて個別の行を選択し、他の演算を適用できます。このシナリオでは、以下を使用できます。

SELECT DISTINCT ON (id) id, date, another_info
FROM the_table
ORDER BY id, date DESC;

方法 2: ウィンドウ関数を使用する

ウィンドウ関数を使用すると、一連の行に対して集計または計算を実行できます。それは動的に定義できます。 ROW_NUMBER() というウィンドウ関数を使用して、各 ID グループ内の各行にランクを割り当て、最も高いランクの行を選択できます。

SELECT id, date, another_info
FROM (
  SELECT id, date, another_info, 
         ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn
  FROM the_table
) t
WHERE rn = 1
ORDER BY id;

ウィンドウ関数を使用した解決策は、通常、ウィンドウ関数を使用した解決策よりも高速です。サブクエリ。

以上がPostgreSQL で各 ID の最後の行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。