2012-10-18 21 views
2
mes_id subject  mem_id  frm_id 
55  Hi   329   401 
72  Re: HI yhi 689   401 
83  Re: HEY HI 401   329 
68  HI yhi  401   689 
59  Hi   401   1734 

嗨, 请从下面的查询中找到我的表格响应,从中我得到1对1聊天消息的上述响应。如何获取每个用户之间最后一行对话的结果?

SELECT mes_id,SUBJECT,mem_id,frm_id 
FROM messages_system_new 
WHERE frm_id = '401' AND mem_id !='401' 
    AND trashed_user NOT LIKE '%401%' 
    AND TYPE = 'message' 
    AND FOLDER != 'saved' GROUP BY mem_id 
    UNION ALL 
    SELECT mes_id,SUBJECT,mem_id,frm_id 
FROM messages_system_new 
WHERE mem_id = '401' AND frm_id !='401' 
    AND trashed_user NOT LIKE '%401%' 
    AND TYPE = 'message' 
    AND FOLDER != 'saved' GROUP BY frm_id 

我只是想要包含mesop的响应,它是两个用户之间最后一次对话59,72,83。请致电 谢谢。

回答

1

试试这个,

SELECT * 
FROM Table1 
WHERE (LEAST(mem_id, frm_id), GREATEST(mem_id, frm_id), mes_id) IN 
    (
     SELECT LEAST(mem_id, frm_id) as x, 
       GREATEST(mem_id, frm_id) as y, 
       MAX(mes_id) as msg_time 
     FROM Table1 
     GROUP BY x, y 
) 
ORDER BY Mes_ID 

SQLFiddle Demo

+0

感谢您的答复,但其对用户401所以我应该在哪里出价值? – John

+0

你是什么意思为用户401的价值? –

+0

我的意思是现在我用用户名401登录,所以我想要我所有的最新对话,我和我的朋友 – John

1

SQL Fiddle

select t.* 
from 
    table1 t 
    inner join (
     select max(mes_id) as mes_id 
     from table1 
     group by least(mem_id, frm_id), greatest(mem_id, frm_id) 
) s on t.mes_id = s.mes_id 
where mem_id = 401 or frm_id = 401 
order by mes_id 
相关问题