2013-05-02 48 views
-2

例子:SQL查詢返回的最後一封郵件

Msg

我希望你能理解。 我正在嘗試使用此查詢,但它只返回用戶1發送的那些查詢。我還需要那些發送給他的查詢。但沒有重複相同的參與者。

+1

哪個RDBMS(MySQL和SQLSERVER,甲骨文等),是這樣嗎? – 2013-05-02 05:19:56

回答

0

嘗試:

SELECT idMsg, idFrom, idTo 
FROM Messages 
WHERE idFrom = 1 OR idTo = 1 
GROUP BY idFrom 
ORDER BY visualized DESC 

+0

我已經嘗試過這樣的事情,但它會返回涉及用戶的所有消息。 我只想要他與用戶的最後一條消息。 我想: 選擇idFrom,idTo,idMsg從mensagens \t \t \t \t \t \t其中idMsg IN(選擇最大(idMsg) \t \t \t \t \t \t \t \t \t \t \t \t從mensagens一 \t \t \t \t \t \t \t \t \t \t \t \t其中idTo = '1' \t \t \t \t \t \t \t \t \t \t \t \t組由idFrom) \t \t \t \t \t \t \t \t \t \t \t \t ORDER BY dataMsg DESC LIMIT 30 OFFSET 0 它幾乎作品,也precisoq u返回向用戶發送消息1個用戶2 – Jean 2013-05-02 05:21:42

0

我會嘗試像

SELECT MAX(id), idto, idfrom 
FROM messages 
WHERE idto = 1 OR idfrom = 1 
GROUP BY idto, idfrom 

它可能有點比你更需要的,但其漂亮和清晰。

+0

這將重複在同一用戶在不同的ID字段用戶對 - 例如, :如果你有'id' 8'idfrom' 6'idto' 1和'id' 9'idfrom' 1'idto' 6,那麼你會看到'id' 8和'id' 9的結果。 – 2013-05-02 05:47:41

+0

Mark Ba​​nnister你是對的。 – Jean 2013-05-02 06:03:02

0

嘗試:

select case when idfrom < idto then idfrom else idto end userid1, 
     case when idfrom > idto then idfrom else idto end userid2, 
     max(id) id 
from messages 
where 1 in (idfrom, idto) 
group by 
     case when idfrom < idto then idfrom else idto end, 
     case when idfrom > idto then idfrom else idto end 
+0

謝謝你,你的代碼非常好。 – Jean 2013-05-02 06:04:41

1
SELECT idMsg(Max), idFrom, idTo 
FROM Messages 
WHERE idFrom = 1 OR idTo = 1 
GROUP BY idFrom 
ORDER BY visualized DESC 

SELECT top 1 idMsg, idFrom, idTo 
FROM Messages 
WHERE idFrom = 1 OR idTo = 1 
ORDER BY DESC 
0

查詢:

SELECT m1.idMsg, m1.idFrom, m1.idTo 
FROM Messages m1 
WHERE m1.dataMsg = (SELECT MAX(m2.dataMsg) 
        FROM Messages m2 
        WHERE m2.idFrom = m1.idFrom 
        AND m2.idTo = m1.idTo)