mysql - 将 sql 查询转换为 ActiveRecord Rails

标签 mysql sql ruby-on-rails activerecord

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

表格设计类似于

 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/

相关文章:

mysql - 聊天的数据库架构 : private and group

mysql - 选择一个没有名为 foobar 的帖子的用户

javascript - Backbonejs 何时初始化集合

php - 通过ajax检索php处理过的数据

php - insert into 中的 SQL 语法

sql - 对所选记录进行排序、分组和重新排序的问题

ruby-on-rails - 使用 Ruby on Rails 将时间插入时间列

ruby-on-rails - 设计:覆盖 current_user(为用户设置不同的类)

mysql - RMySQL 错误引号转义

mysql - 如何避免所有存在重复的记录并仅获取唯一记录?