首页 > 解决方案 > 我想找出查询哪个 group by 后跟 order by

问题描述

我尝试为应用程序聊天创建数据库。我无法在聊天响应中从客户那里获取最新信息,例如一位客户正在与我交谈。然后第二个客户想和我谈谈。我希望我的客户 ID 位于顶部,以便我可以验证尚未回复的人

我的桌子是消息

+---------------------------+---------------+
| msg_id  |  outgoing_id  | |      msg      |
+---------------------------+---------------+
| 1   |  511   |            | test          |
| 2   |  543   |            | Hi            |
| 3   |  775   |            | Hello         |
| 4   |  511   |            | bye           |
| 5   |  543   |            | i want to buy |
+---------------------------+---------------+

我有用户查询

select * from messages left join users on tbmsg.outgoin_id = users.unique_id group by waiting_id order by msg_id desc

这给了我结果

msg_id  |  outgoing_id  |    msg

    1   |  775   |    Hello
    2   |  543   |    Hi
    3   |  511   |    test

但我想要这样的结果。

msg_id | 传出_id | 味精

   1   |  543   |    i want to buy
   2   |  511   |    bye
   3   |  775   |    Hello

标签: mysql

解决方案


SELECT 
       @rowid := @rowid + 1 AS ROWID,t.*
  FROM messages t, 
       (SELECT @rowid := 0) dummy
       
       WHERE
        msg_id IN (select  max(msg_id)
from messages
group by outgoing_id) ORDER BY msg_id DESC

我同意您不应该更改结果中的主键的评论,但如果您希望在开头有一个行号,您可以使用此查询。如果您使用的是 Mysql 版本8.0+ ,则可以将其替换为 ROW_NUMBER()

结果 :

ROWID msg_id 传出_id 味精
1 5 543 我想买
2 4 511 再见
3 3 775 你好

推荐阅读