我试图将每月的报价总和,同时加上最后一笔金额。
例如:
Jan: 300€
Fev: 200€
Mars: 100€
小组应该返回的是:
Jan:300€
Fev: 500€ (200 + Jan's 300)
Mars: 600€ (100 + Fev's 500)
当前SQL:
current_user.quotes.group_by_month(:created_at, last: 12).sum(:price)
我正在使用groupdate
宝石。
感谢。
答案 0 :(得分:4)
如果使用postgresql
,您可以使用 Windows功能
UNBOUNDED PRECEDING
第一行,CURRENT ROW
当前行sum
函数累计select name,sum(price)
over(order by (select 1) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) "price"
from T
sqlfidde:http://sqlfiddle.com/#!17/763e3/7
答案 1 :(得分:1)
Ruby中的解决方案:
s = 0
current_user.quotes.group_by_month(:created_at, last: 12).
sum(:price).
transform_values.map { |v| s += v }
由于只有12个元素的哈希,我建议使用ruby而不是sql的性能损失是微不足道的。使用SQL会更加困难,只有使用简单的ActiveRecord Arel方法或可能是特定于数据库的方法才能实现,请参阅例如Calculating Cumulative Sum in PostgreSQL
答案 2 :(得分:1)
我们可以使用以下代码
quotes = current_user.quotes
sum = 0
quotes.each_with_object({}) do |quote,hassh|
hassh[quote.name] = sum = quote.price + sum
end
hassh