rails - 按天和小时分组

Edw*_*ard 7 datetime group-by ruby-on-rails

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

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

如果我做

TrackMood.where(mood: "good").group("hour(created_at)").count
Run Code Online (Sandbox Code Playgroud)

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

我这里有2个问题

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

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

Sha*_*ell 11

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

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

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

  • 对于 postgres,根据这个答案,函数是`date_part`:/sf/answers/1444599551/ (2认同)