2014-02-21 49 views
1

我有像2014/03/01,2014/02/20,2014/02/19,2014/02/18,2014/01/19 ...如何在postgresql和rails中按月分組3

我想每個月都得到金額(價格)。對於第一個月,第二個,第三個月,...

使用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 } 沒有工作。

我嘗試過其他的東西太多,但它似乎是由日誌SELECT "items".* FROM "items" WHERE "items"."asin" = 'B00HI6ZLL2' AND "items"."domain" = 'co.jp' AND "items"."user_id" = 1 ORDER BY created_at desc

+0

如果您提供了一些您已經寫過的代碼,那可能會有幫助。或者你的模型,控制器是怎麼樣的? – Emu

+0

更新:)我嘗試了其他的東西,但它似乎被忽略。我在日誌中獲取SELECT「items」。* FROM「items」WHERE「items」。「asin」='B00HI6ZLL2'AND「items」。「domain」='co.jp'AND「items」。「user_id」= 1 ORDER BY created_at desc – whitesiroi

+0

我從你的問題中瞭解到,你的物品模型中有一個價格字段,並且你想總結在過去三個月中創建的每個物品的價格。我對麼? – Emu

回答

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') 
+0

看起來像它做了一個技巧:)謝謝。 對不起:)再多一個,如果我想一年一組,也會好嗎? @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') – whitesiroi

+0

Yup :)只是測試它;)它也與一年工作:)謝謝你隊友的幫助:) – whitesiroi

1
sum = Array.new(12,0) 
Item.each do |item| 
    sum[item.created_at.month-1] += item.price 
end 

嘗試使用此方法獲得每月商品價格總和忽略,沒有組或團體。要獲取2月飛蛾的總和,你可以從sum[1]

+0

謝謝:)但我必須得到每個月的總和(價格):)並在未來它會超過3個月,可能:) – whitesiroi

+0

我認爲這就是你想要的。 :) – Emu

+0

歡迎你。 :) – Emu