如何在mysql中使用group by按降序获取数据

Vir*_*alk 0 mysql sql

我想要表记录如下:

---------------------------------------------------------------------------
id | receiver_user_id | sender_user_id | message_text | insertdate
---------------------------------------------------------------------------
6  | 33               | 42             | OLD          | 2013-05-08 10:08:53
8  | 33               | 43             | ddddd        | 2013-05-07 19:01:45
7  | 33               | 38             | Ipsum        | 2013-04-25 10:27:35
---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我正在使用这个查询:

SELECT *
FROM (`player_messages`)
WHERE `receiver_user_id` =  '33'
GROUP BY sender_user_id
ORDER BY `player_messages`.`insertdate` DESC
Run Code Online (Sandbox Code Playgroud)

并获取如下表记录。

---------------------------------------------------------------------------
id | receiver_user_id | sender_user_id | message_text | insertdate
---------------------------------------------------------------------------
6  | 33               | 43             | ddddd        | 2013-05-07 19:01:45
4  | 33               | 42             | NEW          | 2013-05-07 10:08:58
7  | 33               | 38             | Ipsum        | 2013-04-25 10:27:35
---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

请帮忙。提前致谢。

fth*_*lla 5

您正在从表中选择所有字段SELECT *,但仅按 分组sender_user_id,并且非聚合列的值将不受决定,并且不受 order by 的影响。

你应该这样写你的查询:

SELECT   player_messages.*
FROM     player_messages
WHERE    (receiver_user_id, sender_user_id, insertdate) IN (
           SELECT   receiver_user_id, sender_user_id, MAX(insertdate)
           FROM     player_messages
           WHERE    receiver_user_id='33'
           GROUP BY receiver_user_id, sender_user_id)
ORDER BY player_messages.insertdate DESC
Run Code Online (Sandbox Code Playgroud)

这将返回所有接收者和发送者组合具有最大插入日期的player_messages 行。