gpt4 book ai didi

sql - 区分一列,按另一列排序

转载 作者:行者123 更新时间:2023-11-29 14:28:16 35 4
gpt4 key购买 nike

我正在为应用构建消息传递功能,我的数据库表如下所示:

messages:
id
senderId
receiverId
threadId <-- every message is part of a thread
createdAt

我有一个“消息”页面,每个消息线程都有一张卡片,但我希望它显示卡片中的最新消息作为每个线程的预览。这是我到目前为止编写的查询:

SELECT DISTINCT ON ("threadId") * FROM messages ORDER BY "createdAt" DESC;

所以我正在执行 DISTINCT ON ("threadId"),但我也选择了所有列,因为我需要所有数据,这就是为什么有 *DISTINCT ON 子句之后。此查询在此之前运行良好,但现在它在 ORDER BY 子句上失败了。我想返回上次创建的消息,但出现错误:

ERROR:  SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("threadId") * FROM messages order by "cr...

我理解我认为的错误(ORDER BY 列必须与应用 DISTINCT ON 的列相匹配)但我不知道如何获取查询是我想要的,它在变得不同之前由 createdAt 排序。

最佳答案

ORDER BY 中的前导表达式必须与 DISTINCT ON 中的表达式一致:

SELECT DISTINCT ON ("threadId") *
FROM messages
ORDER BY "threadId", "createdAt" DESC;

详细解释:


如果您想要以不同的方式(如注释)对结果进行排序,您必须使用第二个将查询包装在外部查询中订购方式。见:

或类似,具体取决于您的具体情况和要求。获得最佳结果可能需要一些技巧。最近的例子:

关于sql - 区分一列,按另一列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301889/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com