2014-02-21 47 views
0

我有消息的表:通過對Postgres裏選擇不同的最後一封郵件

enter image description here

我只需要一個最後的日期和時間的交談兩個用戶之間。這裏是我做的:

select distinct on (user_from, user_to) 
* 
from messages 

這裏是我所得到的:

enter image description here

我確實在兩個用戶之間得到了一條獨特的對話線,但它不是最後一條。

我應該如何選擇兩個用戶之間最後一次唯一的對話?

編輯:預期輸出:

enter image description here

回答

0

你可以做到這一點使用Window Functions

SELECT * 
FROM 
    (select *, rank() OVER (PARTITION BY date, user_from,user_to ORDER BY time desc) AS pos 
    FROM messages 
) AS msg 

    WHERE pos = 1 

我強烈建議你要注意使用PostgreSQL的令牌作爲列名!

+0

不工作。它輸出三行(應該是四個),並且它們不是唯一的 –

+0

@PostoTrader可以通過添加除了要輸出的東西之外的輸出來更新您的問題嗎? – Houari

+0

@ProstoTrader你想每個日期的兩個用戶之間的最後一條消息?如果是這樣,請看我最新的答案。 – Houari

1

這是我如何做的:

SELECT DISTINCT ON (user_from, user_to) * 
FROM messages 
ORDER BY user_from, user_to, date+time DESC 
相關問題