要解決pg中的groupwise-max,可以使用DISTINCT ON
。就像這樣:
SELECT
DISTINCT ON(pm.user_id)
pm.user_id,
pm.text
FROM
private_messages AS pm
WHERE pm.recipient_id= <my user id>
ORDER BY pm.user_id, pm.id DESC;
http://sqlfiddle.com/#!12/4021d/19
要獲取最新的X但是我們將有子查詢中使用它:
SELECT
q.user_id,
q.id,
q.text
FROM
(
SELECT
DISTINCT ON(pm.user_id)
pm.user_id,
pm.id,
pm.text
FROM
private_messages AS pm
WHERE pm.recipient_id=2
ORDER BY pm.user_id, pm.id DESC
) AS q
ORDER BY q.id DESC
LIMIT 10;
http://sqlfiddle.com/#!12/4021d/28
要獲取發出和收到的線程:
SELECT
q.user_id,
q.recipient_id,
q.id,
q.text
FROM
(
SELECT
DISTINCT ON(pm.user_id,pm.recipient_id)
pm.user_id,
pm.recipient_id,
pm.id,
pm.text
FROM
private_messages AS pm
WHERE pm.recipient_id=2 OR pm.user_id=2
ORDER BY pm.user_id,pm.recipient_id, pm.id DESC
) AS q
ORDER BY q.id DESC
LIMIT 10;
http://sqlfiddle.com/#!12/4021d/42
你能提供一個你期待的結果輸出嗎?在上面的例子中,我假設user_id 2只有1條記錄,對他來說有最新的消息:'謝謝,好!您?' – Akash 2013-03-24 08:03:47
已添加!感謝您的幫助;)是的你是對的,我只需要這次對話的最後一條消息,+9更多來自其他最新對話的俚語消息... – Gediminas 2013-03-24 11:57:41