#mysql #sql #group-by #greatest-n-per-group
#mysql #sql #групповое-по #наибольшее-n-на-группу
Вопрос:
у меня есть таблица t_message, ее сбор разговоров между пользователем и пользователем.
вот структура таблицы.
id_message отправитель_user_id получатель_user_id сообщение 1 2 1 тест 1 2 1 2 тест 2 3 2 1 тест 3 4 1 2 тест 4
с помощью этой таблицы у меня есть цель собрать группу разговоров для пользователя, и в качестве примера я хочу собрать группы разговоров между пользователем 1 и пользователем 2. используя этот запрос
select * from ( select * from t_message where receiver_user_id = 1 order by id_message DESC ) group by sender
и результат
id_message отправитель_user_id получатель_user_id сообщение 3 2 1 тест 3
он показывает группу разговоров между пользователем 1 и пользователем 2, но не показывает разговор между пользователем 1 и пользователем 2. он просто показывает последний разговор от пользователя 2 или отправителя.
какой запрос мне нужен, чтобы собрать группу разговоров с пользователем beetwen и получить последнюю запись этого разговора. есть предложения?
о, кстати, я очень сожалею о своем плохом английском, надеюсь, вы поняли идею.
Комментарии:
1. является ли запись желаемого результата 4?
2. да, итак, результат, который я хотел. группа разговоров содержит последний разговор.
Ответ №1:
Вы можете объединить отправителя и получателя, чтобы сформировать диалог
select a.id, a.conversation, b.sender_user_id, b.receiver_user_id, b.message
from (
select max(id_message) id,
if(sender_user_id>receiver_user_id,
concat(receiver_user_id,',',sender_user_id),
concat(sender_user_id,',',receiver_user_id)) conversation
from t_message
group by conversation) a
join t_message b on a.id = b.id_message;