2014-01-24 125 views
4

我有投票系統。每個投票都有一個分數。如何統計日期範圍內的每一天的記錄

我想能夠統計每天有多少票?

下面的代碼添加的每票每一天的成績,並返回總哈希和日期作爲重點:

ratings = where(created_at: start.beginning_of_day..Time.zone.now).group("created_at").select("created_at, sum(score) as total_score") 
ratings.each_with_object({}) do |rating, scores| 
scores[rating.created_at.to_date] = rating.total_score 
end 

我希望能算多少票作了關於每天。有任何想法嗎?

回答

0

相應的MySQL查詢將

SELECT date(created_at) as date, count(*) as count FROM `ratings` WHERE (created_at between '2014-01-21 00:00:00' AND '2014-01-24 08:16:46') GROUP BY date(created_at) 

Rails的版本是:

start_date = Date.parse("2014-01-21").beginning_of_day 
end_time = Time.zone.now 
Rating.group('date(created_at)').select('date(created_at) as date, count(*) as count').where(["created_at between ? AND ?", start_time, end_time]) 
+0

噢,我沒有」 t注意日期範圍,lemme正確答案在一分鐘 –

+0

這個問題有標籤'postgresql-9.2' –

+0

@Monk_Code查詢看起來像它會在Pg運行也很好,你只需要修復奇怪的屁股MySQL引用的標識符,去掉'rating'附近的反引號或用ANSI SQL標準雙引號替換它們('「ratings」') –

10

你可以做你想要使用哪一個更漂亮的語法:

from = start.beginning_of_day 
to = Time.zone.now 
Rating.group('date(created_at)').where(created_at: from .. to).count(:score) 

這將每天返回一個包含日期(created_at)作爲鍵和計數(:分數)作爲值的散列。

實施例: { 「2014年1月21日」=> 100 「2014年1月22日」=> 1213}

相應的SQL是:

SELECT COUNT("ratings"."score") AS count_score, date(created_at) AS date_created_at FROM "ratings" WHERE ("ratings"."created_at" BETWEEN '2014-01-21' AND '2014-01-24') GROUP BY date(created_at) 
+0

我需要計數,而不是總結? – grabury

+0

在你的問題中你使用了sum。我會改變使用計數的答案。 – cristian

相關問題