2013-10-15 65 views
0

我試圖找到一種方式來輸出給定的兩個日期之間的每一天的記錄數:計數記錄的值

from = 7.days.ago.to_date 
to = Date.today 
total = Records.where(created_at: from..to).group("date(created_at)").count 
list = total.values 

只是有問題的是,當一些日期沒有記錄,它不會被顯示,只會被忽略。

因此,不是這樣的:

list = [0,4,3,0,3,0,1] 

我得到這個:

list = [4,3,3,1] 

嗯,我想我理解,因爲查詢的記錄,而不是日期之後所有的,爲什麼我得到這樣也好,。

我可以做一個循環from.upto(to)each一個do查詢到數據庫,讓這些計數和建設,所以我的小名單 - 或別的東西很 - 但是,是不是有很多涉及到一個更乾淨的解決方案的查詢?

回答

1

我知道這不是一個完美的解決方案。但它不涉及任何額外的查詢。基本上反向合併哈希和零計數的所有日期之間從和。

from = 7.days.ago.to_date 
to = Date.today 
date_hash = {} 
(from..to).each{|date| date_hash[date] = 0} 
total = Records.where(created_at: from..to).group("date(created_at)").count 
total.reverse_merge!(date_hash) 
+0

謝謝。它運作良好。就在我想要獲取值時,使用'values'方法,它將零重新排列到最後。我得到'[4,3,3,1,0,0,0]'而不是'[0,4,3,0,3,0,1]'。在做'價值'之前,訂單是正確的。 – pzin

+1

如果您在獲取值之前對散列進行排序,該怎麼辦? '哈希[total.sort] .values' – usha

+0

這很好。爲什麼'價值'奇怪的重新排序? – pzin