gpt4 book ai didi

ruby-on-rails - 使用 ActiveRecord 查询接口(interface)进行分组和排序

转载 作者:行者123 更新时间:2023-11-29 12:50:07 26 4
gpt4 key购买 nike

我有一个模型,ConnectedUser,它属于另外两个模型 UserStation

这是一个简单的模型,只有这些关系和一个 bool 值 active

我的目标查询结果将只是每个 User 的每个最近的 ConnectedUser 记录(其中 Station 是一个特定的 ID)。

例如,如果我的 ConnectedUser 表如下所示...

+----+---------+------------+--------+------------+
| id | user_id | station_id | active | created_at |
+----+---------+------------+--------+------------+
| 1 | 1 | 1 | true | 20 June |
| 2 | 1 | 1 | false | 19 June |
| 3 | 1 | 2 | false | 20 June |
| 4 | 2 | 1 | false | 18 June |
| 5 | 2 | 1 | false | 21 June |
+----+---------+------------+--------+------------+

并且该站是 id 为 1 的站,然后我希望查询返回...

[
<ConnectedUser id: 1, user_id: 1, station_id: 1, active: true, created_at: "2019-06-20">,
<ConnectedUser id: 5, user_id: 2, station_id: 1, active: false, created_at: "2019-06-21">
]

为了实现这一点,我一直在尝试使用 grouporder

ConnectedUser.where(station: station).select(:user_id).group(:user_id).order(:created_at)

但一直出现这样的错误:

ActiveRecord::StatementInvalid (PG::GroupingError: ERROR: column "connected_users.created_at" must appear in the GROUP BY clause or be used in an aggregate function)

我无法获得特定的 ConnectedUser id,所以感觉我缺少一些重要的理解如何使用 group 和聚合结果。

这在一个 ActiveRecord 查询中可能吗?

非常感谢。

最佳答案

在 Postgres 中,如果你想要每个用户/站点的最新版本,我会推荐 distinct on:

select distinct on (station_id, user_id) cu.*
from ConnectedUser cu
order by station_id, user_id, created_at desc;

关于ruby-on-rails - 使用 ActiveRecord 查询接口(interface)进行分组和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327626/

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