Rails 4:按月分组

时间:2013-11-19 22:06:57

标签: ruby-on-rails ruby

在Rails / Ruby中,如何根据表中的日期列按月分组并聚合度量。

我从Railscasts尝试了以下技术。

http://railscasts.com/episodes/29-group-by-month

到目前为止,我的代码看起来像这样

result = result.where(transaction_date: start..Date.current)
result = result.select(:transaction_date, :quantity)
result.group_by { |t| t.transaction_date.beginning_of_month }

我想,我需要一个Ruby等价的SQL GROUP BY来汇总数量。

我正在寻找的SQLite3版本是:

select strftime('%m', transaction_date)
     , sum(quantity)
from transactions
group by strftime('%m', transaction_date)

1 个答案:

答案 0 :(得分:4)

所以这是一个很好的例子,说明为什么你应该在dev和prod中使用相同的数据库,因为你真的想在SQL中这样做,这对于你指定的两个数据库是不同的。我会给你Postgres版本。

假设您的模型被称为“实体”并且您正在对称为数量的属性求和,那么您将要执行以下操作:

Entity.select(
  "date_trunc( 'month', created_at ) as month, sum(quantity) as total_quantity"
).group('month')

生成的Entity对象将具有虚拟属性'month'和'total_quantity',您可以将其用于报告。