MySQL高级GROUP BY语句

时间:2011-09-17 08:51:54

标签: mysql group-by greatest-n-per-group

我在mysql中有消息表。 列被命名为发件人,收件人,文本,ID,日期。

像这样查询:

SELECT max(id), text 
FROM `messages` 
WHERE reciever = $user_id OR sender = $user_id 
GROUP BY reciever, sender 
ORDER BY date DESC

它按发件人(或收件人)对邮件进行分组,并返回最后一条消息ID max(id),但不会返回上一条消息文本。

如果没有JOIN和UNION,有没有办法解决这个问题?

非常感谢!

3 个答案:

答案 0 :(得分:3)

您可以按照以下方式执行此操作:

SELECT * FROM messages 
WHERE id IN 
    (
         SELECT MAX(id) FROM messages
         WHERE reciever = $user_id OR sender = $user_id
         GROUP BY reciever, sender
    ) 
ORDER BY date DESC

答案 1 :(得分:1)

分组操作只能与聚合操作(如总和,平均值和计数)配合使用。 使用其他属性是没有意义的。

想象一下,你有两个具有相同reiceiver的元组,你期望分组文本是什么?这没有任何意义。

根据我对你的目标的猜测,@ danishgoel的回答可能就是你想要的,如果我已经猜到了。

答案 2 :(得分:0)

选择$ user_id的最后一条消息:

SELECT id, text FROM `messages`
WHERE `reciever` = $user_id OR `sender` = $user_id 
ORDER BY `id` DESC
LIMIT 1