mysql - mysql表分组时检索最后一条记录

标签 mysql sql group-by greatest-n-per-group

我有表t_message,它收集用户和用户之间的对话。

这是表结构。

 id_message sender_user_id receiver_user_id message 
1          2              1                test 1
2          1              2                test 2
3          2              1                test 3
4          1              2                test 4

with that table, i have an objective to collect group of conversation for user, and as example i want to colletct groups of conversation beetween user 1 and user 2. using this query

select * from ( select * from t_message where receiver_user_id = 1 order by id_message DESC ) group by sender

结果是

id_message sender_user_id receiver_user_id message 
3          2              1                test 3

它显示用户 1 和用户 2 之间的对话组,但不显示用户 1 和用户 2 之间的对话。它只显示用户 2 或发件人的最后一次对话。

我需要什么查询来收集用户之间的一组对话,并检索该对话的最后记录。 有什么建议吗?

哦,顺便说一句,我很抱歉我的英语不好,我希望你明白。

最佳答案

您可以连接发送者和接收者以形成对话

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;

fiddle

关于mysql - mysql表分组时检索最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462139/

相关文章:

android - 多个操作的后台任务 - Android

mysql - MySQL char 列大小限制是如何计算的?

php - 存储和访问 WebApp 用户隐私设置的最佳实践?

php - 使用 PHP 进行错误处理和获取 MySQL 数据

php - 使用 PHP 在 SQL 列中输出不同的值

mysql - SQL - 是否可以替换 uuid 主键中的值?

mysql - 根据以下数据计算排名

mysql - SQL : Grouping by column while displaying other column entries

mysql - SQL SELECT 请求使用 count(*) 和多个 GROUP BY

mysql - SQL 使用 unix 时间戳计算一个月内的记录