0

我有一张桌子

CREATE TABLE `messages` ( `uid` BIGINT NOT NULL ,
`mid` BIGINT , `date` BIGINT NOT NULL  , PRIMARY KEY (`mid`));

我想选择按 uid 分组的 max(date),即对于每个 uid(read user) 我想查找最新消息(最大日期)

试过这个

select messages.mid,  max(messages.date), messages.uid, messages.body 
                                   from messages 
                             where messages.chat_id is  NULL 
                                   group by messages.uid 

但查询工作错误。

4

2 回答 2

3

子查询可以为您提供所需的日期,以便为每个用户检索最新消息:

SELECT messages.uid, messages.mid, messages.date, messages.body
FROM messages
WHERE messages.chat_id IS NULL
AND messages.date IN 
( SELECT MAX(m2.date) FROM messages m2 
  WHERE m2.uid = messages.uid AND m2.chat_id IS NULL 
)
;
于 2012-06-20T02:00:37.283 回答
1

您需要在使用聚合函数时按所有字段进行分组:) 使用子查询可以解决问题。

SELECT messages.date,messages.uid,messages.mid,messages.body FROM messages WHERE messages.chat_id IS NULL AND messages.date IN (SELECT MAX(msg.date) FROM messages msg WHERE messages.chat_id IS NULL And msg.uid = 消息.uid )

或者,也可以使用“有”子句来完成

完毕 :)

于 2012-06-20T02:25:17.110 回答