繁体   English   中英

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

[英]mySQL select the last message from each conversation

我有一个存储所有已发送/已接收消息的用户表:

id | data_type | user_name | body | datetime

我想要实现的是:

1)从每个对话中选择最后一行,即表中每个唯一的user_name的最后插入的行,其data_type为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。 谢谢您的帮助。

如果您现有的查询产生所需的正确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

我希望它能起作用

SELECT user_harry.*
FROM user_harry INNER JOIN (
    SELECT MAX(id) as max_id, user_name 
    FROM user_harry
    WHERE data_type IN(1,2)
    GROUP BY user_name
) temptable ON user_harry.id = temptable.max_id AND user_harry.user_name = temptable.user_name

艾哈迈德·韦比·奥尔加斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM