もしそうならレールで
TrackMood.where(mood: "good").group("date_format(created_at, '%Y%m%d %H')").count
SQLを生成します
SELECT COUNT(*) AS count_all, date_format(created_at, '%Y%m%d %H')
AS date_format_created_at_y_m_d_h
FROM `track_moods`
WHERE `track_moods`.`mood` = 'good' GROUP BY date_format(created_at, '%Y%m%d %H')
そして、出力としてハッシュを取得します
{"20120524 11"=>10, "20120524 12"=>7, "20120524 13"=>15}
レコードが作成されていない時間のハッシュにゼロを取得したい。
チェックしたいすべての時間の配列を作成しようとしました:
times = ((Time.now - 5.days).to_i..Time.now.to_i).to_a.in_groups_of(1.hour)
.collect(&:first).collect { |t| Time.at(t).strftime('%Y%m%d %H') }
それから試してみる
TrackMood.where("mood = 'good' AND date_format(updated_at, '%Y%m%d %H')
IN (:times)", mood: "good", site_id: 2, times: times )
.group("date_format(created_at, '%Y%m%d %H')").count
しかし、これでも以前と同じハッシュが得られます。
では、ハッシュにゼロを追加するにはどうすればよいでしょうか?
MYSQL データベースを使用しています。