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, должно быть в статистической функции (например, COUNT, SUM, MAX и т. Д.) В операторе SELECT.
РЕДАКТИРОВАТЬ - понял, что Group By выше не совсем то, что я думаю, что вы хотите (хотя бы пример набора результатов поможет), поэтому одна мысль, чтобы упростить это. Во время создания сообщения вы можете установить дополнительное значение столбца - journal_id. Это будет присвоено новому значению при создании нового сообщения и последующем повторном использовании для любых ответов. После этого вы можете сгруппировать по параметру Chat_id группировать сообщения так, как я думаю, вы хотите, чтобы они были