简体   繁体   English

在Rails 4中将SQL查询转换为Active Record查询

[英]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.

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