SELECT *
を組み合わせることはできません GROUP BY some_column
を使用 Postgresで(some_column
を除く PK)、それは矛盾しているからです。集計されていないすべての列(SELECT
で使用) 、HAVING
またはORDER BY
集計関数の外側の句)は、GROUP BY
に含まれている必要があります list-主キー列がテーブルのすべての列を置き換えることができる場所。それ以外の場合は未定義です 集約されたセットから選択する値。
ドキュメントごと:
GROUP BY
の場合 が存在するか、集計関数が存在する場合、SELECT
には無効です。 集計関数内を除いて、またはグループ化されていない列が機能的にグループ化された列に依存している場合を除いて、グループ化されていない列を参照する式をリストします。グループ化された列(またはそのサブセット)が、グループ化されていない列を含むテーブルの主キーである場合、機能依存性が存在します。
他の特定のRDBMSは、ここでダーティトリックを実行し、これを許可して任意の値を選択することが知られています...
最新でコメントしたユニークな患者のリストが必要なようです それぞれコメントします。 Postgresで最も簡単な方法は、DISTINCT ON
を使用することです。 :
SELECT DISTINCT ON (patient_id) *
FROM comments
WHERE clinician_id = $1
ORDER BY patient_id, created_at DESC NULLS LAST;
しかし、これはSQLiteではうまくいきません-そもそもループに入ってはいけません:
- SQLite3「LIKE」またはPostgreSQL「ILIKE」用の汎用Rubyソリューション?
NULLS LAST
created_at
の場合にのみ関連します NULLにすることができます:
- PostgreSQLは日時ascで並べ替え、最初はnullですか?
DISTINCT ON
の詳細 :
- 各GROUPBYグループの最初の行を選択しますか?