在Rails 4中将SQL查询转换为活动记录查询
我想知道上面的SQL查询是否可以转换为活动记录查询。目前,我正在使用在Rails 4中将SQL查询转换为活动记录查询,sql,ruby-on-rails,activerecord,ruby-on-rails-4,Sql,Ruby On Rails,Activerecord,Ruby On Rails 4,我想知道上面的SQL查询是否可以转换为活动记录查询。目前,我正在使用find\u by\u sql,如下所示: SELECT * FROM ( SELECT DISTINCT ON (sec) id, sec FROM tasks ORDER BY sec, id DESC ) sub ORDER BY id DESC LIMIT 4; 或者只需使用group by(不需要区分) 此AR查询将分为两个sql查询:主查询和子查询。子查询将在:
find\u by\u sql
,如下所示:
SELECT *
FROM (
SELECT DISTINCT ON (sec)
id, sec
FROM tasks
ORDER BY sec, id DESC
) sub
ORDER BY id DESC
LIMIT 4;
或者只需使用group by(不需要区分)
此AR查询将分为两个sql查询:主查询和子查询。子查询将在:sec属性值上检索不同的记录,主查询将按降序ID对它们进行排序,并将记录限制为4能否提供有关表架构的更多信息?恕我直言,我不认为你需要更多的信息-不是因为我不想分享-只是因为我真的不认为你需要更多的信息。有一个名为
tasks
(modelTask
)的表,有两个integer
列(id
和sec
)。您可以在中看到表的创建和查询-其中还有一个附加函数,您可以忽略它。我主要是想了解sec列的类型,感谢您让我知道它是一个integerwiw,我更喜欢find_by_sqlversion@JohnNaegle我自己也更喜欢connection.execute和find_by_sql。
Task.find_by_sql("SELECT * FROM ( SELECT DISTINCT ON (sec) id, sec FROM tasks ORDER BY sec, id DESC ) sub ORDER BY id DESC LIMIT 4")
Task.select('t.*').from(Task.distinct(:sec).select(:id, :sec).group(:sec).order('sec, id desc'), :t).order('id desc').limit(4)
Task.select('t.*').from(Task.select(:id, :sec).group(:sec).order('sec, id desc'), :t).order('id desc').limit(4)