1

列ID、from、to、datetime、subject、bodyを持つテーブル「messages」があります。各送信者(から)の最新メッセージの件名と本文を取得したい。

これが私の質問です

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はすべてのグループから最新のメッセージを選択します。

4

2 に答える 2

2
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"
于 2012-09-29T08:35:43.850 に答える
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
于 2012-09-27T14:02:31.443 に答える