2017-03-04 33 views
0

我下面的表格有列表的郵件查詢。我想得到每個對話的最後一條消息。請幫助正確的查詢來獲得它。麻煩找到每個會話

ID ID2 User1 User2   Message     TimeStamp   
---- ----- ------- ------- ------------------------- ------------------------ 
    1  1  1  2 hii      March, 04 2017 8:30:00 
    1  2  2  1 hey bro     March, 04 2017 8:31:00 
    1  3  1  2 hw are u?     March, 04 2017 8:32:00 
    1  4  2  1 good,thnks4asking   March, 04 2017 8:33:00 
    5  1  3  1 r u there?    March, 04 2017 8:34:00 
    5  2  1  3 yup,say     March, 04 2017 8:35:00 
    5  3  3  1 hw are u?     March, 04 2017 8:36:00 
    5  4  1  3 m fine     March, 04 2017 8:37:00 
    5  5  3  1 where are u these days? March, 04 2017 8:38:00 
    1  5  1  2 your most welcom :D  March, 04 2017 8:39:00 

這裏ID是討論ID(聊天ID說,例如圖1是具有id爲1和2和5的用戶之間的討論id是對於具有id爲1的用戶之間的討論3)和ID2是數在討論中。結果應該顯示2條消息,因爲「最受歡迎」是ID 1和2的用戶之間的最後一條消息,第2條消息「這些日子你在哪裏?」是具有ID 1和3

我試圖像

SELECT message ,MAX(id2) 
FROM pm 
WHERE user1=1 OR user2=1 
GROUP BY id 

SELECT message 
FROM pm 
WHERE user1=1 OR user2=1 
GROUP BY id 
HAVING id2=MAX(id2) 

注許多查詢的用戶之間的最後一條消息:對於現在我只想來自用戶的最後(具有ID=1)的觀點。

+0

該表中未示出。剪下圖像並插入它。或者創建一個ASCII表格。 –

+0

我已經讓桌子檢查出來了。 – kumar

+0

你的問題不清楚。您正在詢問「每個會話的最後一條消息」,但您的預期輸出是兩條消息。 '你最開山鼻祖:d - >其中,這些天' 對話是兩個用戶之間。這個對話只能有最後一個消息。你爲什麼要求兩個?另外,我可以問爲什麼這個表有兩個ID列?看起來這不是一個表,而是一個SELF JOIN或連接兩個其他表的結果。 –

回答

0

這可能會幫助您:

 

    select * from pm where user1 = 1 order by id desc limit 1; 

這裏「ID」(你可以根據你的需要,即時間戳使用),是依據你的列名其中你將得到與限制1降序排列,這樣你會得到你最後的信息。

+0

沒有它不工作,因爲我想..pls通過上面的表我已經取得 – kumar

0

還有就是要做到這一點的方法不止一種。你在正確的軌道上。我想你只需要使用JOIN。

下面的例子是一個自連接。第一個查詢是最重要的。它與你已經寫過的相似。它使用一個GROUP BY子句。它只返回兩行。這些行表示每個對話的最後一條消息時間戳。然後,我們將這兩行連接回主表以獲取消息。我們加入ON ID和最大時間戳。

SELECT * 
FROM (
    /* Get the latest message timestamp for each conversation. */ 
    SELECT ID, MAX(TimeStamp) AS MaxTimeStamp 
    FROM Conversations 
    WHERE User1 = 1 OR User2 = 1 
    GROUP BY ID 
) AS A 
LEFT JOIN (
    /* Get the message */ 
    SELECT ID, Message, TimeStamp 
    FROM Conversations 
) AS B 
ON A.ID = B.ID 
AND A.MaxTimeStamp = B.TimeStamp 

上面的SQL獲取您想要的結果。它讓我們

每個會話的最後一條消息是用戶1已與任何人

注意了,由於你的表只有包含用戶1中,其中在第一查詢子句是完全可選的對話。如果它被刪除,你會得到相同的結果集。此外 - 因爲它看起來像ID2處於上升的方式自動遞增 - 你可以改變MAX(TimeStamp)出來MAX(ID2)並獲得相同的結果集。就像我說的,不止一種方式。

希望這會有所幫助!

例SQL小提琴Here。 你想要的行如下。

enter image description here

+0

tysm先生其工作(Y) – kumar

+0

很高興聽到它的工作。請點擊「已接受」的答案,並投票! :) –