8

我想创建一个数组,其中包含每天每小时创建的项目数。

我正在跟踪人们的感受,所以我的模型被称为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在几个小时内没有创建任何内容?

4

2 回答 2

12

1) 而不是只对日期的小时部分进行分组,您需要对相关的日期部分进行分组,即日期到小时,并且不包括比这更具体的任何内容。例如

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

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

于 2012-05-24T15:59:58.837 回答
1

对于 PostgreSQL,您可以使用date_part

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

于 2013-12-17T14:44:03.187 回答