按日,小时和计数分组 - 如果没有则输出0

时间:2012-05-28 13:55:33

标签: mysql sql ruby-on-rails

如果我做的话在轨道上

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数据库。

0 个答案:

没有答案