テーブル内の各カテゴリの最大日付を持つ ID を決定するために、PostgreSQL は適切なアプローチを提供します。サンプル データを考えてみましょう:
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 句を利用します。この句を使用すると、指定された式に基づいて一意の行を選択し、結果を別の列でグループ化できます。この場合、行をカテゴリ別にグループ化し、各グループ内の最大の日付を持つ個別の ID を選択します。
これを実現するクエリは次のとおりです。
SELECT DISTINCT ON (category) id -- , category, date -- any other column (expression) from the same row FROM tbl ORDER BY category, date DESC;
DISTINCT ON 句それぞれの異なるカテゴリ値の最初の出現のみが選択されるようにします。 ORDER BY 句は、結果をまずカテゴリ別に昇順 (アルファベット順) に並べ替え、次に日付別に降順に並べ替えます。この順序により、各カテゴリの最新の日付を持つ行が最初に表示されます。
このクエリを実行すると、次の結果が得られます:
id |
---|
7 |
2 |
6 |
これらの ID (7、2、6) は次のことを表します。それぞれカテゴリ a、b、c の最大日付。
以上がPostgreSQLで各カテゴリの最大日付を持つIDを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。