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

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

DDD
DDDオリジナル
2025-01-02 19:40:39430ブラウズ

How to Efficiently Retrieve the Most Recent 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 ごとに最新の行を取得することです。

Distinct On 演算子

PostgreSQL で最も効率的なアプローチは、DISTINCT ON 演算子を使用することです。

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

このクエリは、一意の 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;

このクエリは、日付の降順で各 ID の行番号を計算するウィンドウ関数を作成します。 WHERE rn = 1 条件は、各 ID の最高ランクの行のみを含むように行をフィルター処理し、最後の ORDER BY 句により、結果が ID 順に並べられるようにします。

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

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