获取MySQL中用户的最新日期记录

时间:2014-12-07 16:58:35

标签: mysql greatest-n-per-group

我有两张桌子

user_conversation
-----------------
id
from_user_id
to_user_id
item_id
offer_detail_id
message_type
deleted_by_sender
deleted_by_receiver

user_conversation_reply
-----------------------
id
from_user_id
message_text
sent_date
conversation_id
is_read

每当新会话开始针对任何项目时,将在user_conversation_table中输入记录,并且该消息将记录在该会话的user_conversation_reply表中。同样,可以在user_conversation_table中为该对话添加不同的消息。

我希望获得用户的所有对话。 (即from_user_id,to_user_id,item_id构成一个组合)并且我需要有这个对话的最后一条消息。

user_conversation 

id     from_user_id     to_user_id     item_id
1           8              2             1

user_conversation_reply 

id     from_user_id     message     conversation_id   sent_date
1           8              helo             1         2014-12-07
2           8           how r u             1         2014-12-08

用户可以是多个会话的一部分。所以,我希望获得用户每次会话的最后一条会话消息。

我使用此查询过滤掉用户的记录。

Select * from user_conversation where to_user_id = 2;

请建议。

谢谢, 费萨尔纳西尔

1 个答案:

答案 0 :(得分:1)

假设user_conversation_reply.id是自动增量主键,
并且最后一条消息始终是最高id

SELECT *
FROM (
  Select uc.id, max( ucr.id ) max_ucr
  from user_conversation uc
  JOIN user_conversation_reply ucr ON ucr.conversation_id = uc.id
  where uc.to_user_id = 2
  GROUP BY uc.id
) q
JOIN user_conversation uc ON q.id = uc.id
JOIN user_conversation_reply ucr ON q.max_ucr = ucr.id
;