mysql - 选择聊天对话中的最后一行

标签 mysql sql

我有一个这样的表:

+---+--------+----------+---------+
|id | sender | receiver | created |
+---+--------+----------+---------+
  1     4         9       3333
  2     9         4       3334
  3     4         9       3335
  4     5         4       3336
  5     4         9       3337

我的查询是:

SELECT *
FROM chat_messages 
WHERE sender = 4 OR receiver = 4
GROUP BY sender, receiver
ORDER BY created DESC

结果是:

+---+--------+----------+---------+
|id | sender | receiver | created |
+---+--------+----------+---------+
  5     4         9       3337
  4     5         4       3336
  2     9         4       3334

我离我要找的东西更近了。我正在寻找这个结果:

+---+--------+----------+---------+
|id | sender | receiver | created |
+---+--------+----------+---------+
  5     4         9       3337
  4     5         4       3336

意思是,如果 session 是用户 n 的,我想要最新的行,而用户 nsender 的其他行或一个接收器。提前致谢。

最佳答案

您可以在 where 子句中使用过滤。这是一种方法:

select cm.*
from chat_messages cm
where cm.created = (select max(cm2.created)
                    from chat_messages cm2
                    where (cm2.sender, cm2.receiver) in ( (cm.sender, cm.receiver), (cm.receiver, cm.sender))
                   ) and
      4 in (cm.receiver, cm.sender);

如果您只想要创建的时间和 ID,您可能会发现聚合效果更好:

select least(cm.receiver, cm.sender),
       greatest(cm.receiver, cm.sender),
       max(cm.id), max(cm.created)
from chat_message cm
where 4 in (cm.receiver, cm.sender)
group by least(cm.receiver, cm.sender), greatest(cm.receiver, cm.sender);

关于mysql - 选择聊天对话中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242752/

相关文章:

python - Django 按日期分组和每个类别的计数

mysql - 同时获取列的最大值和特定记录的同一列

mysql - 从学生和分数表中选择分数最高的学生

php - 将函数结果传递到sql

php mysqli 数据统计和搜索功能不起作用

mysql - 如何在SQL中执行动态if语句?

sql - 如果存在,则选择其他插入然后选择

mysql - SQL:我找不到此查询中的错误

mysql - 如果为空则忽略其他日期范围(mysql)

mysql - 如何从 MySQL 中获取纯粹的值(value)