我有一张桌子
CREATE TABLE `messages` ( `uid` BIGINT NOT NULL ,
`mid` BIGINT , `date` BIGINT NOT NULL , PRIMARY KEY (`mid`));
我想选择uid分组的最大(日期),即每个uid(读取用户)我想找到最新消息(最大日期)
尝试了这个
select messages.mid, max(messages.date), messages.uid, messages.body
from messages
where messages.chat_id is NULL
group by messages.uid
但查询错误。
答案 0 :(得分: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
)
;
答案 1 :(得分:1)
你需要在使用聚合函数时按所有字段进行分组:)使用子查询可以解决问题。
SELECT messages.date,messages.uid,messages.mid,messages.body 来自消息 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 = messages.uid)
或者它也可以使用'having'子句
来完成完成:))