ruby-on-rails – 限制rails查询中的PER用户

所以我有一个标准的用户表结构,有一个主要的id键,以及那些没有的,以及下面的角色表:

 user_id | persona_id | time_inserted
 2              1             x
 2              2             x+1
 2              3             x+2
 1              1             x+3
 5              8             x+6
 5              9             x+1

我想要做的是检索最后插入的行,并限制为每个用户ID一个.所以,在那个查询中,我想要的结果是:

[2,3]因为最后插入2是persona_id 3(x 2),[1,1]和[5,8],因为最后插入5是persona_id 8(x 6)

这是我的查询:

to_return = Persona.select(to_get).where(to_condition)

这有效,但可以全部检索它们.如何按要求限制查询?非常感谢你.

最佳答案 这应该工作:

to_return = Persona.select(to_get).where(to_condition).group('user_id').having('time_inserted = MAX(time_inserted)')

更新

如果不将其放在group子句中,则无法选择列.
由于您只想通过user_id进行分组,一种可能的解决方案是,首先选择user_id,最大time_inserted如下:

users_ids_relation = Persona.select('user_id').group('user_id').having('time_inserted = MAX(time_inserted)')

然后,根据条件将其与角色表连接,然后选择所需的列:

users_ids_relation.joins('personas').where(to_condition).select(to_get)

它会给你预期的结果.

点赞