2012-09-27 70 views
0

我有一個表「消息」與列id,from,to,datetime,subject,body。我想爲每個發件人(來自)獲取最新消息的主題和正文。Group by和「first」或「min」

這裏是我的查詢

SELECT min(subject) as tsubject,min(body) as tbody 
FROM messages 
WHERE "to"=28 
GROUP BY "from" 
ORDER BY "datetime" 

這將導致

ERROR: column "messages.datetime" must appear in the GROUP BY clause or be used in an aggregate function 

,所以我得到的錯誤是什麼一回事,但我不希望按「日期時間」的結果,只是要排序的羣體,所以min會從每個組中挑選最新的消息。

回答

1
SELECT a.*,u.name,m.subject,m.body FROM 
(SELECT "from",max("datetime") as sent 
FROM messages 
WHERE "to" = 31 
GROUP BY "from") a 
LEFT JOIN users u ON a."from" = u.id 
LEFT JOIN messages m ON a.sent=m."datetime" AND a."from"=m."from" 
1
select subject, body, m."from" 
from (
    SELECT 
     id, 
     "from", 
     max("datetime") 
    FROM messages 
    WHERE "to" = 28 
    group by id, "from" 
    ) s 
    inner join 
    messages m on m.id = s.id 
ORDER BY "datetime" desc 
+0

嘗試它正確後,原來它是「從」,實際上並不組。 –