首页 > 解决方案 > 如何在 Postgres 中将 15 分钟时间序列聚合为 1 小时间隔

问题描述

在我的 PostgreSQL 数据库中,我有一个非常大(超过 4000 万)的行表,它通过 15 分钟间隔时间戳(包含在“开始时间”列中)表示各个位置的流量计数。我想将这些间隔分成每小时间隔以减少行数。

格式为“无时区的时间戳”,因此每条记录如下所示:

2020-04-26 01:00:00
2020-04-26 01:15:00
2020-04-26 01:30:00
2020-04-26 01:45:00
ETC...

我想要做的是将所有这些 15 分钟的记录“汇总”成 1 小时的间隔,这样01:00:00-01:45:00等于01:00:00(凌晨 1 点)

我的问题与这个问题类似,但答案是关于 MySQL 的,我不确定这种语法是否适用于 Postgres 应用程序。

有没有办法可以用 Postgres 中的 SQL 脚本来处理这个问题?

标签: sqlpostgresqltime

解决方案


你会使用date_trunc(). 例如按小时计算:

select date_trunc('hour', ts), count(*)
from t
group by date_trunc('hour', ts)

推荐阅读