MySQL按最新条目分组的多个列上的不同选择

时间:2013-10-16 14:12:20

标签: mysql

enter image description here

对于我的用户的收件箱,我想仅获得对话中最后一条消息的主题。

正如您所看到的,ID为1的用户有2个会话。一个是QA,另一个是Admin。所以我想获得消息id:4和id:6的主题。

我尝试在DISTINCT和GROUP BY created_at的单个查询中执行此操作但没有成功。 id和created_at都可用于获取会话中的最后一条消息,但我更喜欢使用created_at。

3 个答案:

答案 0 :(得分:0)

select 
  *,
  least   (from_user_id, to_user_id) as min_uid,
  greatest(from_user_id, to_user_id) as max_uid
from
  (select * from message order by id desc) as message_reversed
group by
  min_uid,
  max_uid

答案 1 :(得分:0)

SELECT id
     , created_at
     , from_user_id
     , to_user_id
     , subject
     , text 
  FROM message m
  JOIN 
     ( SELECT MAX(id) max_id
         FROM message
        GROUP
           BY LEAST(from_user_id,to_user_id)
            , GREATEST(from_user_id,to_user_id)
     ) x
    ON x.max_id = m.id;

答案 2 :(得分:-1)

鉴于“id”是一个自动递增的主键,并且您知道您正在使用的用户的ID,为什么不这样查询?

SELECT `text` as `lastMessage` 
FROM `yourTable` 
WHERE `from_user_id` = 1 
ORDER BY `id` DESC 
LIMIT 0,1