rails - 按天和小时分组

时间:2012-05-24 15:33:16

标签: ruby-on-rails datetime group-by

我想创建一个每天每小时创建的项目数组。

我正在跟踪人们的感受,所以我的模型被称为TrackMood它只有一个名为mood的列和时间戳。

如果我这样做

TrackMood.where(mood: "good").group("hour(created_at)").count

我得到类似的东西     {11 => 4,12 => 2,13 => 2,15 => 1}

我这里有2个问题

1如何将日期添加到此中,以便它不仅仅将昨天11点创建的项目添加到今天11点添加的项目中?

2如果没有创建任何内容,我如何确保0显示几个小时?

2 个答案:

答案 0 :(得分:10)

1)不要仅仅在日期的小时部分进行分组,而是需要对相关日期的一部分进行分组,即截至小时的日期,不包括任何更具体的日期。例如。

TrackMood.where(mood: "good").group("date_format(created_at, '%Y%m%d %H')").count

2)即使没有找到任何组,你总是会从这个电话中获得一个哈希值。如果您想查看有多少个群组,可以在其上调用.size.count

答案 1 :(得分:1)

对于PostgreSQL,您可以使用date_part

SO-post - Rails & Postgresql: how to group queries by hour?