0

I have a table

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

I want to select max(date) grouped by uid, i.e. for every uid(read user) I want to find the latest message (with tha maximum date)

tried this

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

but the query works wrong.

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)

あるいは、「having」句を使用して行うこともできます

終わり :)

于 2012-06-20T02:25:17.110 に答える