SELECT sender_ID, subject, MAX(id), MAX(created_at), COUNT (id)
FROM message
WHERE recipient_id = current_user_id OR sender_id = current_user_id
GROUP BY subject, sender_ID, receipient_id
ORDER BY MAX(created_at) DESC
GROUP BYを使用する場合、GROUP BY句に含まれていないものはすべて、SELECTステートメントの集計関数(COUNT、SUM、MAXなど)に含まれている必要があります。
編集-上記のGroupByは、私が望むことを完全には実行しないことに気づきました(例の結果セットが役立つでしょう)ので、これを単純化することを考えました。メッセージの作成時に、追加の列値(conversation_id)を設定できますか。これは、新しいメッセージが作成されて応答に再利用されるときに、新しい値に割り当てられます。次に、group Byconversation_idを使用して、メッセージを希望どおりの方法でグループ化できます。