我需要连接三个表,将结果分组为一列,并显示另一列的最高值

时间:2013-01-02 03:42:03

标签: mysql sql join greatest-n-per-group

说我有三张桌子:

    名称为的
  • users
  • emails包含具有电子邮件地址的行
  • messages包含包含其电子邮件日期和标题的行

当然,第二和第三个表都可以使用用户的ID与第一个表匹配。

我想要一个只会每个用户一次的查询,他们的电子邮件地址以及最近消息的日期。

如果我使用它:

SELECT name,email,title,date
FROM users
JOIN emails ON users.id = emails.user_id
JOIN messages ON messages.user_id = emails.user_id
group by name
order by date desc

我没有收到最新消息,因为订单是在加入和分组后发生的。我从用户那里收到一封电子邮件,电子邮件按日期排序。

这可以在一次加入中完成吗?我错过了什么?

您可以使用的虚拟数据库的Pastebin:http://pastebin.com/1x273aEe - 实际的数据库并不完全像这样,但它也是同样的问题。

1 个答案:

答案 0 :(得分:3)

SELECT  a.*, b.*, c.*
FROM    users a
        INNER JOIN emails b
            ON a.ID = b.user_ID
        INNER JOIN messages c
            ON a.ID = c.user_ID
        INNER JOIN
        (
            SELECT user_id, MAX(date) maxDate
            FROM messages
            GROUP BY user_ID
        ) d ON c.user_ID = d.user_ID AND
                c.date = d.maxDate
相关问题