mySQL 从每个对话中选择最后一条消息

标签 mysql sql datetime message

我有一个用户表,用于存储他们所有发送/接收的消息:

id | data_type | user_name | body | datetime

而我想要实现的是:

1) 从每个对话中选择最后一行,即表中每个唯一用户名的最后插入行,其数据类型为 1(已接收消息)或 2(已发送消息)。

2) 只获取早于特定日期时间的行,即 WHERE datetime < from_datetime。 (日期时间存储为 UTC)。

有谁知道我怎样才能做到这一点?这超出了我的专业水平。

这是我目前所拥有的:

SELECT MAX(id) as id, body, user_name 
FROM user_harry
WHERE data_type = 1 OR data_type = 2
GROUP BY user_name

它返回正确的行的最后一个 id,但正文不是来自该行的那些。 谢谢您的帮助。

最佳答案

如果您现有的查询生成了您想要的正确 ID 值,那么这应该会为您提供该值以及与这些行关联的正文值:

select y.*
  from (select max(id) as max_id, user_name
          from user_harry
         where data_type in (1, 2)
         group by user_name) x
  join user_harry y
    on x.max_id = y.id
   and x.user_name = y.user_name

关于mySQL 从每个对话中选择最后一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576954/

相关文章:

java - 是否有类似java时间戳的xml时间戳格式?

mysql - Golang 在 Struct 属性中使用小写首字母

mysql - 按年调优sql

php - 在 CakePHP 查询中获得不同的不同 DISTINCT 结果

sql - 选择只有 1 个 bool 列为 true 的行

java - 如何将 java.sql.Date 和 java.sql.Time 合并到 java.util.Date?

php - 通过谷歌地图 API 运行地址数据库?

mysql - 使用sql中的case语句填充三列的总和

mySQL 多个表的 JOIN

python - 将 python 日期时间与 mysql 日期时间进行比较