rails – 按天和小时分组

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

我正在追踪人们的感受,因此我的模型被称为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小时?

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

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

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

对于PostgreSQL,您可以使用date_part

SO-post- Rails和Postgresql:如何按小时对查询进行分组?