如何为每个对话选择上一条消息?

Mar*_*per 1 mysql sql group-by greatest-n-per-group

以下是我的数据库的样子:

表: conversations

+----+--------+--------+
| id | user_1 | user_2 |
+----+--------+--------+
| 1  | 1      | 2      |
| 2  | 2      | 3      |
| 3  | 1      | 3      |
+----+--------+--------+
Run Code Online (Sandbox Code Playgroud)

表: messages

+----+--------------+------+
| id | conversation | text |
+----+--------------+------+
| 1  | 1            | hej  |
| 2  | 1            | test |
| 3  | 2            | doh  |
| 4  | 2            | hi   |
| 5  | 3            | :)   |
| 6  | 3            | :D   |
+----+--------------+------+
Run Code Online (Sandbox Code Playgroud)

然后当我运行followin查询时:

SELECT
    *
FROM `messages`
INNER JOIN `conversations`
    ON `conversations`.`id` = `messages`.`convesations`
GROUP BY `conversations`.`id`
ORDER BY `messages`.`id` DESC
Run Code Online (Sandbox Code Playgroud)

然后我从那里得到了messages:

+----+--------------+------+
| id | conversation | text |
+----+--------------+------+
| 1  | 1            | hej  |
| 3  | 2            | doh  |
| 5  | 3            | :)   |
+----+--------------+------+
Run Code Online (Sandbox Code Playgroud)

但是,是否有可能这样做,我将获得该messages.id组中最高的消息,而不是最低的消息?

编辑:这是我想要的输出messages:

+----+--------------+------+
| id | conversation | text |
+----+--------------+------+
| 2  | 1            | test |
| 4  | 2            | hi   |
| 6  | 3            | :D   |
+----+--------------+------+
Run Code Online (Sandbox Code Playgroud)

由于这些都是messages相同的conversation最高id.

Qua*_*noi 7

SELECT  *
FROM    conversations c
JOIN    messages m
ON      m.id =
        (
        SELECT  id
        FROM    messages mi
        WHERE   mi.conversation = c.id
        ORDER BY
                mi.conversation DESC, mi.id DESC
        LIMIT 1
        )
Run Code Online (Sandbox Code Playgroud)

messages (conversation, id)为此创建索引以快速工作.