所以我有一个标准的用户表结构,有一个主要的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)
它会给你预期的结果.