MySQL advenced GROUP BY语句

MySQL advenced GROUP BY语句,mysql,group-by,greatest-n-per-group,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 maxid,但不返回最后一个邮件文本 没有联合,有没有办法解决这个问题 非常感谢 您可以

我有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 maxid,但不返回最后一个邮件文本

没有联合,有没有办法解决这个问题


非常感谢

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

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

Group by操作只能与sum、average和count等聚合操作一起使用。 使用其他属性毫无意义

假设有两个元组具有相同的reiceiver,那么按文本分组的结果会是什么?这毫无意义


根据我对您目标的猜测,如果我猜到了wright,@danishgoel的答案可能是您想要的。

要选择$user\u id的最后一条消息:

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

你的问题不起作用的原因在我的回答中已经说明了。但我认为,除了查询本身,您还应该用自然语言说明您的目的,因为您可能会错误地设置查询格式,人们不会清楚地知道您真正想要什么。有关类似问题的答案,请参阅此链接