如何检索group_by的每个组中的第一个值?

时间:2014-02-26 11:04:56

标签: ruby-on-rails ruby postgresql

如何在查询中找到使用组的所有first / top值?所以我想找到每个分组月份的第一条记录:

class Log < ActiveRecord::Base
  belongs to :foo
  attr_accessible :month, :votes, :foo_id
  # ...
end

因此,在上面的模型中,我想检索每个月票数最多的记录。记录已按投票顺序排序。

3 个答案:

答案 0 :(得分:1)

这将根据月份过滤所有数据,您可以使用每个循环进入其中并从中获取第一条记录。

month_wise = Log.all.group_by { |t| t.created_at.beginning_of_month }

month_wise.each do |month|
puts month.first.inspect
end

答案 1 :(得分:1)

您可以使用group_bymap执行此操作:

tops = Log.all.group_by{ |l| l.created_at.month }.map(&:first)

答案 2 :(得分:1)

如果您使用的是Rails,则可以使用transform_values

Log.all.group_by{ |l| l.created_at.month }.transform_values(&:first)