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)
,这很奇怪哦。