1. ホーム
  2. sql

[解決済み] PostgreSQLで日付が最大のidをカテゴリでグループ分けして選択するには?

2023-01-01 20:10:08

質問

例えば、私はカテゴリによってグループ化された最大の日付でidを選択したいと思います。 結果は次のとおりです。7, 2, 6

id  category  date
1   a         2013-01-01
2   b         2013-01-03
3   c         2013-01-02
4   a         2013-01-02
5   b         2013-01-02
6   c         2013-01-03
7   a         2013-01-03
8   b         2013-01-01
9   c         2013-01-01

PostgreSQLでこれを行う方法を教えていただいてもよろしいでしょうか?

どのように解決するのですか?

これは完璧なユースケースで DISTINCT ON - 標準の Postgres 固有の拡張 DISTINCT :

SELECT DISTINCT ON (category)
       id  -- , category, date  -- any other column (expression) from the same row
FROM   tbl
ORDER  BY category, date DESC;

降順でのソートには注意が必要です。カラムがNULLになる可能性がある場合、そのカラムに NULLS LAST :

DISTINCT ON はシンプルで高速です。詳細な説明はこの関連回答で。

大きなテーブルで、各グループに多くの行がある場合 category は別の方法を検討してください。