繁体   English   中英

将SQL查询转换为ActiveRecord Rails

[英]Converting sql query to ActiveRecord Rails

我的数据库中有一个位置表,其中包含系统所有用户的位置数据。

桌子的设计有点像

 id| user_id| longitude| latitude| created_at|

我有很多用户。 现在,我要选择所有这些用户的最新(按创建位置排序)位置。

我能够找出相同的SQL查询

SELECT * FROM   my_table
WHERE (user_id , created_at) IN (
                SELECT   user_id, MAX(created_at)
                FROM     my_table
                GROUP BY user_id
            )
AND user_id IN ('user1', 'user2', ... ); 

现在,当我在Ruby On Rails中工作时,我想将此SQL查询写到activerecord rails。 有人可以帮我吗?

我认为这将给出正确的结果:

MyModel.order(created_at: :desc).group(:user_id).distinct(:user_id)

如果要生成完全相同的查询,可以这样做:

MyModel.where("(user_id, created_at) IN (SELECT user_id, MAX(created_at) from my_table GROUP BY user_id)")

我认为子查询可能无法很好地处理大型数据集,但是我知道您是否只想使其陷入困境并在以后进行优化。

如何添加范围并以略有不同的方式获得相同的结果:

class UserLocation

  def self.latest_per_user
    where("user_locations.created_at = (select Max(ul2.created_at) from user_locations ul2 where ul2.user_id = user_locations.user_id)")
  end

end

然后,您只需使用:

UserLocation.latest_per_user.where(:user_id => ['user1', 'user2'])

...以获取所需的数据集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM