[英]Convert SQL query to Active Record query in Rails 4
SELECT *
FROM (
SELECT DISTINCT ON (sec)
id, sec
FROM tasks
ORDER BY sec, id DESC
) sub
ORDER BY id DESC
LIMIT 4;
I am wondering if the above SQL query can be converted to an Active Record query. 我想知道上面的SQL查询是否可以转换为Active Record查询。 For now I am using
find_by_sql
as follows: 现在,我正在使用
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)
or just do it with group by only (distinct not needed) 或仅与分组依据一起使用(不需要区别)
Task.select('t.*').from(Task.select(:id, :sec).group(:sec).order('sec, id desc'), :t).order('id desc').limit(4)
This AR query will split into 2 sql queries, main and sub queries. 此AR查询将分为2个sql查询,主要查询和子查询。 Sub query will retrieve distinct records on :sec attribute value and main query will order them in descending ids and limit records to 4
子查询将检索有关:sec属性值的不同记录,主查询将按降序对它们进行排序并将记录限制为4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.