我的数据库中有一个位置表,其中包含系统中所有用户的位置数据。
表格设计类似于
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)")
我认为子查询可能无法很好地适应大型数据集,但我理解如果您只是想将其放入 rails 并稍后进行优化。
关于mysql - 将 sql 查询转换为 ActiveRecord Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488424/