gpt4 book ai didi

sql - 如何获得按不同列排序的不同结果? SQL 数据库

转载 作者:行者123 更新时间:2023-11-29 13:51:28 25 4
gpt4 key购买 nike

我正在尝试找出在 postgresql 中执行此查询的最佳方法。我有一个消息表,我想获取用户从每个不同用户收到的最后一条消息。我需要从行中选择所有内容。

我想这是我想按发件人 ID“msgfromid”分组的地方,但是当我这样做时它提示说我没有将我的选择语句中的所有内容都包含在我的分组语句中,但我只想按一列分组,而不是全部。因此,如果我尝试在一列上使用 Distinct,它会强制我首先按“distinct on”列(“msgfromid”)进行排序,这会阻止我获得所需的正确行(按从发送的最后一条消息排序)发件人“msgsenttime”)。

我的目标是使它在我的服务器和数据库上尽可能高效。

这就是我现在拥有的,无法正常工作。 (这是我之后用来加入相关信息的另一个查询的子查询,但我认为这是不相关的)

SELECT DISTINCT ON ("msgfromid") "msgfromid", "msgid", "msgtoid", "msgsenttime", "msgreadtime", "msgcontent", "msgreportstatus", "senderun", "recipientun" 
FROM "messages"
WHERE "msgtoid" = ?
ORDER BY "msgsenttime" desc, "msgfromid"

我想如果我在子查询中预先订购它们可能会起作用,但它似乎只是随机选择一个,即使它起作用,效率也不是很高,因为我拉出每条消息,对吧?:

SELECT DISTINCT ON ("msgfromid") "msgfromid", "msgid", "msgtoid", "msgsenttime", "msgreadtime", "msgcontent", "msgreportstatus", "senderun", "recipientun"      
FROM
(
SELECT * FROM "messages"
WHERE "msgtoid" = ?
ORDER BY "msgsenttime" desc
) as "mqo"

感谢您的帮助。

最佳答案

您的 order by 键的顺序错误:

SELECT DISTINCT ON ("msgfromid") m.*
FROM "messages" m
WHERE "msgtoid" = ?
ORDER BY "msgfromid", "msgsenttime" desc;

对于 DISTINCT ON,括号中的键需要是 ORDER BY 中的第一个键。

如果您希望最终结果以不同的方式排序,那么您需要使用子查询,在外部查询上使用不同的 ORDER BY

关于sql - 如何获得按不同列排序的不同结果? SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441512/

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