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グループの最初の行を選択しますか?