Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中获得每组前N项_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在RubyonRails中获得每组前N项

Ruby on rails 在RubyonRails中获得每组前N项,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个带有日期和频率字段的模型,频率是一个整数。我正在尝试每次约会前5个频率。 基本上,我想按日期分组,然后得到每组前5名 到目前为止,我只检索组中的前1名: Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)') 我希望每次约会的最大频率加上第二、第三、第四和第五大频率 对不起,如果这是真的很简单,或者如果我的术语是

我有一个带有日期和频率字段的模型,频率是一个整数。我正在尝试每次约会前5个频率。 基本上,我想按日期分组,然后得到每组前5名

到目前为止,我只检索组中的前1名:

Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)')
我希望每次约会的最大频率加上第二、第三、第四和第五大频率

对不起,如果这是真的很简单,或者如果我的术语是关闭的;我刚刚开始使用rails:

您可以使用以下功能:

 Observation
   .select("obs1.*")
   .from("observations obs1")
   .joins("LEFT JOIN observations AS obs2 ON obs1.date = obs2.date AND obs1.frequency <= obs2.frequency")
   .group("obs1.date, obs1.id")
   .having("count(*) <= 5")
   .order("obs1.date, obs2.frequency")

此查询返回每个日期的前5个频率。

您使用的是哪个数据库?@romainsalles->mysqlI认为这更像是SQL问题。请参阅mysql中的ROW_NUMBER函数,并将其与find_by_sql ActiveRecord方法相结合。您应该能够确定按日期检索您的5个最频繁观察的适当请求。我更喜欢Postgres,我无法测试此请求,但我认为类似的方法可能会起作用:Observation.find_by_sql SELECT date,frequency FROM SELECT frequency,date AS created_at,id,分区上的行数按日期顺序按日期描述,频率描述作为观察值的秩,其中通道='channelOne'作为o,其中秩感谢!问题:这将以升序排列频率。我需要他们在下降,为了让我得到前5名。我试过了。orderobs1.date,obs2.frequency描述了一个猜测,但没有成功。还有,你能给我指一下这方面的教程吗?非常感谢:@orrymr,我将此响应用作资源: