Вкратце, вы не можете поместить ORDER BY перед GROUP BY;SQL требует ORDER BY после GROUP BY.
. Однако вы можете достичь требуемого результата - либо воспользовавшись описанным ниже длинным методом, либо структурировав свой запрос с помощью другого предложения ORDER BY:
ORDER BY m.conversation_id, m.date DESC
В коде, который выбирает данные из БД, вы выбираете первую строку для каждого нового возвращаемого идентификатора диалога.
Как всегда, я строю запрос поэтапно.Во-первых, найдите метку времени самого последнего сообщения для каждого идентификатора разговора, который включает «идентификатор пользователя 100»:
SELECT m2.conversation_id, MAX(m2.date) AS date
FROM Message AS m2
WHERE m2.from = 100 OR m2.to = 100
GROUP BY m2.conversation_id
Теперь, объедините его с исходной таблицей, чтобы получить интересующие строки:
SELECT m1.*
FROM Message AS m1
JOIN (SELECT m2.conversation_id, MAX(m2.date) AS date
FROM Message AS m2
WHERE m2.from = 100 OR m2.to = 100
GROUP BY m2.conversation_id
) AS m3
ON m1.conversation_id = m3.conversation_id AND m1.date = m3.date
ORDER BY m1.date DESC;