【问题标题】:how to group by month in postgresql and rails 3如何在postgresql和rails 3中按月分组
【发布时间】:2014-02-21 04:17:36
【问题描述】:

我的价值类似于 2014/03/01、2014/02/20、2014/02/19、2014/02/18、2014/01/19 ...

我想按月获得总和(价格)。第一个月,第二个月,第三个月,...

使用 rails 3 和 postgresql。

我试过@items = Item.where(:asin => @item.asin, :domain => @item.domain, :user_id => @item.user_id).order('created_at desc').group {created_at.beginning_of_month } 没用。

我也尝试了其他的东西,但似乎被忽略了,日志中没有 group 或 group by SELECT "items".* FROM "items" WHERE "items"."asin" = 'B00HI6ZLL2' AND "items"."domain" = 'co.jp' AND "items"."user_id" = 1 ORDER BY created_at desc

【问题讨论】:

  • 如果您提供一些您已经编写的代码,那可能会有所帮助。或者你的模型、控制器是什么样子的?
  • 更新 :) 我尝试了其他东西,但似乎被忽略了。我进入日志 SELECT "items".* FROM "items" WHERE "items"."asin" = 'B00HI6ZLL2' AND "items"."domain" = 'co.jp' AND "items"."user_id" = 1 ORDER BY created_at desc
  • 我从您的问题中了解到,您的商品模型中有一个价格字段,您想总结过去三个月创建的每个商品的价格。我说的对吗?
  • 我现在有 3 个月的数据,我想得到每个月的总和(价格)。未来3个月以上。

标签: sql ruby-on-rails ruby ruby-on-rails-3 postgresql


【解决方案1】:

您可以使用它,但它仅适用于支持DATE_FUNC 函数的数据库,例如 PostgreSQL 和 MySQL。它不适用于 SQLite。

@items = Item.select("DATE_TRUNC('month', created_at) AS month, sum(price) AS total_price_per_month").group('month')

【讨论】:

  • 看起来它成功了 :) 谢谢。抱歉 :) 再来一个,如果我也想按年分组,可以吗? @items = Item.select("DATE_TRUNC('month', created_at) AS month,DATE_TRUNC('year', created_at) AS year, sum(price) AS total_price_per_month").group('month, year')
  • 是的 :) 刚刚测试过 ;) 它也适用于 year :) 谢谢各位伙伴的帮助 :)
【解决方案2】:
sum = Array.new(12,0)
Item.each do |item|
  sum[item.created_at.month-1] += item.price  
end

试试这个以获得每个月的项目价格总和。要获取二月飞蛾的总和,您可以从 sum[1] 获得这个

【讨论】:

  • 谢谢 :) 但我必须得到每个月的 sum(price) :) & 未来可能会超过 3 个月 :)
  • 我想这就是你想要的。 :)
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2013-07-03
相关资源
最近更新 更多