Rails和Postgresql:如何按小时分组查询?

如何在Postgres&Rails中按小时分组? 我已阅读了不少SO答案,但我收到了错误。

这在按日期分组时有效:

Model.group("date(updated_at)").count 

然后我尝试了以下一小时,但他们没有工作:

 Model.group("hour(updated_at)").count Model.group("date_format(updated_at, '%H')").count Model.group("extract(hour from updated_at)").count 

一旦我找到了需要更新的特定时间,我将如何获得那些小时的模型? 即:

 Model.where("hour(updated_at) = ?", 5) 

您可以尝试以下方法

 Model.group("DATE_PART('hour', updated_at)").count 

更新:

如何查找记录

 Model.where("DATE_PART('hour', updated_at) = ?", 5) 

PostgreSQL提供了两种方法来提取日期/时间的一部分:

EXTRACT是SQL标准函数,存在于其他基于SQL的数据库中。

 Model.group("EXTRACT(hour FROM created_at)").count Model.where("EXTRACT(hour FROM created_at) = ?", 5) 

date_part函数

 Model.group("date_part('hour', updated_at)").count Model.where("date_part('hour', updated_at) = ?", 5) 

官方文件 。

如果你想要日期和小时,你可以使用date_trunc:

Model.group("date_trunc('hour', created_at)").count

如果你想按顺序得到答案:

Model.order("date_trunc('hour', created_at)").group("date_trunc('hour', created_at)").count

是的,你不能只做order(:created_at) ,这很奇怪哦。