7

如何在 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

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

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

3 回答 3

14

你可以试试以下

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

更新:

如何查找记录

Model.where("DATE_PART('hour', updated_at) = ?", 5)
于 2013-03-03T03:17:45.357 回答
1

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)

官方文档

于 2017-04-02T14:47:38.967 回答
0

如果你想要日期和小时,你可以使用 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)很好。

于 2018-01-22T22:42:28.217 回答