在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)
答案 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',您可以将其用于报告。