извлечение последней записи при группировании таблицы mysql

#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;
 

скрипка