Ruby on rails ActiveRecord为每个日期选择前10项,持续30天

Ruby on rails ActiveRecord为每个日期选择前10项,持续30天,ruby-on-rails,activerecord,rails-activerecord,Ruby On Rails,Activerecord,Rails Activerecord,模型是Posts,每个post都有upvots:integer。 每天都会创建数百个帖子,我想通过一个查询返回过去30天中每天排名前10位的上传帖子。(300项结果) 按时间顺序排列 我想返回过去30天的结果,并在同一个查询中显示每天排名前10位的帖子 预期结果应该是: 今天的前10篇,昨天的前10篇。。。30天前发布的前10条帖子 是否有任何方法可以在每天不进行循环和单独查询的情况下执行此查询 原始SQL如下所示: 它返回带有2个值的散列,第一个值是带有posts数组的key posts,第二

模型是Posts,每个post都有upvots:integer。 每天都会创建数百个帖子,我想通过一个查询返回过去30天中每天排名前10位的上传帖子。(300项结果)

按时间顺序排列

我想返回过去30天的结果,并在同一个查询中显示每天排名前10位的帖子

预期结果应该是:

今天的前10篇,昨天的前10篇。。。30天前发布的前10条帖子

是否有任何方法可以在每天不进行循环和单独查询的情况下执行此查询

  • 原始SQL如下所示:
  • 它返回带有2个值的散列,第一个值是带有posts数组的key posts,第二个值是date

    sql = "select (array_agg('id => ' || id || ', ' || 'body => ' ||  body || ', ' || 'upvotes => ' || upvotes order by upvotes desc))[1:
    10] as posts, date from posts group by date;"
    
    records = ActiveRecord::Base.connection.execute(sql)
    records[0] = {"posts"=> "{\"id => 8, body => atis atis animatis, upvotes => 9\",\"id => 11, body => Fuga enim sit aliquam., upvotes => 8\",\"id => 20, body => Vel vero fugiat explicabo., upvotes => 8\",\"id => 18, body => Nesciunt dolor voluptatibus ad., upvotes => 7\",\"id => 17, body => Laboriosam qui nam esse., upvotes => 6\",\"id => 13, body => Earum est temporibus odio., upvotes => 6\",\"id => 16, body => Autem qui nam omnis., upvotes => 4\",\"id => 7, body => Facilis aut non aut., upvotes => 4\",\"id => 15, body => Voluptatem non asperiores vero., upvotes => 4\",\"id => 12, body => Nihil facere aut natus., upvotes => 3\"}",
     "date"=>2019-11-24 14:41:34 UTC}
    
    然后您可以解析结果。希望能有帮助

    sql = "select (array_agg('id => ' || id || ', ' || 'body => ' ||  body || ', ' || 'upvotes => ' || upvotes order by upvotes desc))[1:
    10] as posts, date from posts group by date;"
    
    records = ActiveRecord::Base.connection.execute(sql)
    records[0] = {"posts"=> "{\"id => 8, body => atis atis animatis, upvotes => 9\",\"id => 11, body => Fuga enim sit aliquam., upvotes => 8\",\"id => 20, body => Vel vero fugiat explicabo., upvotes => 8\",\"id => 18, body => Nesciunt dolor voluptatibus ad., upvotes => 7\",\"id => 17, body => Laboriosam qui nam esse., upvotes => 6\",\"id => 13, body => Earum est temporibus odio., upvotes => 6\",\"id => 16, body => Autem qui nam omnis., upvotes => 4\",\"id => 7, body => Facilis aut non aut., upvotes => 4\",\"id => 15, body => Voluptatem non asperiores vero., upvotes => 4\",\"id => 12, body => Nihil facere aut natus., upvotes => 3\"}",
     "date"=>2019-11-24 14:41:34 UTC}