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

时间:2014-07-04 14:58:52

标签: mysql sql datetime message

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

id | data_type | user_name | body | datetime

我想要实现的目标是:

1)从每个对话中选择最后一行,即表中data_type为1(已接收消息)或2(已发送消息)的每个唯一user_name的最后一行。

2)只获取比特定日期时间早的行,即WHERE datetime< from_datetime。 (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,但是body不是该行的那些。 谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果您现有的查询生成了您想要的正确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

答案 1 :(得分:2)

我希望它有效

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

AhmetVehbiOlgaç