2012-10-18 22 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 
相關問題