MySQL advenced GROUP BY语句
我有mysql中的消息表。 列的名称为发件人、收件人、文本、id、日期 这样的查询: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,但不返回最后一个邮件文本 没有联合,有没有办法解决这个问题 非常感谢 您可以
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
你的问题不起作用的原因在我的回答中已经说明了。但我认为,除了查询本身,您还应该用自然语言说明您的目的,因为您可能会错误地设置查询格式,人们不会清楚地知道您真正想要什么。有关类似问题的答案,请参阅此链接