在 Postgres 中分组为 2 小时的间隔

Posted

技术标签:

【中文标题】在 Postgres 中分组为 2 小时的间隔【英文标题】:Grouping into interval of 2 hours in Postgres 【发布时间】:2021-12-26 09:01:52 【问题描述】:

我对想要执行的 PostgreSQL 命令有一些困难。

select code,TIMESTAMP WITHOUT TIME ZONE 'epoch' +
INTERVAL '1 second' * round(extract('epoch' from created_at) / 7200) * 7200 as created_at,COUNT ("active" ) as active
from "otp"
GROUP BY "code", round(extract('epoch' from created_at) / 7200)

这是我的数据:

code      created_at            active
------    -------------------   ------
467380    2021-08-13 12:03:15   1
656608    2021-08-13 12:22:56   1
892624    2021-08-13 11:59:36   1
868549    2021-08-13 12:10:05   1
804703    2021-08-13 13:04:24   1

我尝试以 2 小时为间隔对它们进行分组,我得到这是我当前的输出:

code      created_at            active 
------    -------------------   ------ 
467380    2021-08-13 12:00:00   1 
656608    2021-08-13 12:00:00   1 
892624    2021-08-13 12:00:00   1 
868549    2021-08-13 12:00:00   1 
804703    2021-08-13 14:00:00   1

但我想在 14 小时内将 12 到 14 小时之间的时间分组,而不是在 12 小时内,例如:

code      created_at            active 
------    -------------------   ------ 
467380    2021-08-13 14:00:00   1 
656608    2021-08-13 14:00:00   1 
892624    2021-08-13 12:00:00   1 
868549    2021-08-13 14:00:00   1 
804703    2021-08-13 14:00:00   1

我怎样才能实现它?

【问题讨论】:

也许使用ceiling(),而不是round() 【参考方案1】:

我觉得你需要date_bin:

select code,
       date_bin('2 hours', created_at, '2000-01-01 00:00:00') as created_at,
       COUNT ("active" ) as active
from "otp"
GROUP BY "code",
         date_bin('2 hours', created_at, '2000-01-01 00:00:00');

【讨论】:

以上是关于在 Postgres 中分组为 2 小时的间隔的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 postgres 将时间间隔转换为小时数?

如何在postgres中对几个月的日期记录分组后填补时间间隔

在python中按半小时间隔对文件列表进行分组

将时间间隔从文本转换为数字并按客户时间间隔分组

时区感知 postgres 查询为分钟、小时、天创建时间序列

如何在 Clickhouse 中使用 group by 间隔 1 小时?