sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでカテゴリ別に最大日付グループのIDを選択するにはどうすればよいですか?

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

    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を追加することをお勧めします :

    • 列ASCで並べ替えますが、最初にNULL値を使用しますか?

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

    • 各GROUPBYグループの最初の行を選択しますか?

    categoryごとに多くの行がある大きなテーブルの場合 別のアプローチを検討してください:

    • GROUP BYクエリを最適化して、ユーザーごとに最新の行を取得します
    • グループごとの最大クエリを最適化する


    1. INSERT ... ON DUPLICATE KEY UPDATE with WHERE?

    2. Postgresqlドロップビュー

    3. SQL標準委員会のPostgreSQLエージェント

    4. テーブルの作成中にエラーが発生しました:1行目の'order(order_id INT UNSIGNED NOT NULL AUTO_INCREMENT、user_id'の近くのSQL構文にエラーがあります