【问题标题】:retrieve the last record when grouping mysql table分组mysql表时检索最后一条记录
【发布时间】:2014-06-27 23:36:14
【问题描述】:

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

这是表格结构。

 id_message sender_user_id receiver_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 sender_user_id receiver_user_id 消息 3 2 1 测试 3

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

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

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

【问题讨论】:

  • 愿望结果记录是4?
  • 是的,所以我想要的结果是。对话组包含最后一个对话。

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


【解决方案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;

fiddle

【讨论】:

    猜你喜欢
    • 2010-11-21
    相关资源
    最近更新 更多