SQL-如何选择所有聊天并按最新消息排序

SQL-如何选择所有聊天并按最新消息排序,sql,Sql,我正在创建一个简单的聊天应用程序,我想选择所有的聊天,并根据他们最近的消息(列已创建)。 这两个表是分开的,如下所述: 聊天 消息 为了实现这一点,我编写了以下SQL脚本: SELECT * CHAT AS chat LEFT JOIN MESSAGE AS message ON chat.ID = message.CHAT_ID GROUP BY chat.ID ORDER BY message.CREATED_ON 当我运行该脚本时,结果不是按最近的消息排序,而是随机排序。 我还注意到

我正在创建一个简单的聊天应用程序,我想选择所有的
聊天
,并根据他们最近的
消息
(列
已创建
)。 这两个表是分开的,如下所述:

聊天

消息

为了实现这一点,我编写了以下SQL脚本:

SELECT * CHAT AS chat LEFT JOIN MESSAGE AS message ON chat.ID = message.CHAT_ID
GROUP BY chat.ID
ORDER BY message.CREATED_ON
当我运行该脚本时,结果不是按最近的消息排序,而是随机排序。
我还注意到脚本速度不快。

您的查询格式不正确,因为您正在使用
SELECT*
groupby
。(这会忽略其他语法错误,例如缺少
FROM
子句。)您的查询应该返回错误

您似乎不仅希望订购聊天记录,还希望包含最新消息。为此,请使用窗口功能:

SELECT c.*, m.*
FROM chat c LEFT JOIN
     (SELECT m.*,
             ROW_NUMBER() OVER (PARTITION BY m.chat_id ORDER BY m.CREATED_ON DESC) as seqnum
      FROM MESSAGE m
     ) m
     ON c.ID = m.CHAT_ID AND m.seqnum = 1
ORDER BY m.CREATED_ON DESC;

在大多数数据库中,
消息(chat\u id,created\u on)
上的索引会有所帮助。

我删除了不一致的数据库标记。请标记您真正使用的数据库。谢谢。你的问题正是我想要的。但是,有没有一种方法可以在不使用
windows函数的情况下实现相同的结果呢?因为我使用的是NodeJS库类型表和
左连接后的子查询
似乎不受支持。@Manu。备选方案都将使用子查询。