可能重复:
在 Postgres 中将时间戳截断为 5 分钟的最快方法是什么?
Postgresql SQL GROUP BY 任意精度的时间间隔(低至毫秒)
我想在 PostgreSQL 中以 5 分钟的间隔聚合数据。如果我使用
date_trunc()
功能,我可以按每小时、每月、每天、每周等间隔聚合数据,但不能按 5 分钟或 5 天等特定间隔聚合数据。
select date_trunc('hour', date1), count(*) from table1 group by 1;
我们如何在 PostgreSQL 中实现这一目标?
date_bin()
:
SELECT date_bin('5 min', date1, '2000-1-1') AS min5_slot
, count(*)
FROM table1
GROUP BY 1
ORDER BY 1;
参见:
SELECT date_trunc('hour', date1) AS hour_stump
, (extract(minute FROM date1)::int / 5) AS min5_slot
, count(*)
FROM table1
GROUP BY 1, 2
ORDER BY 1, 2;
您可以
GROUP BY
两列:截断为小时的时间戳和 5 分钟时段。
该示例生成插槽
0 - 11
。如果您愿意,请添加 1
1 - 12
。extract()
的结果转换为整数,因此除法 / 5
会截断小数位。结果:此查询仅返回找到值的 5 分钟时段的值。如果您想要每个时段的值,或者如果您想要5分钟时段的运行总和,请考虑以下相关答案:
这是一个简单的查询,您可以将其包装在函数中或在各处剪切和粘贴:
select now()::timestamp(0), (extract(epoch from now()::timestamptz(0)-date_trunc('d',now()))::int)/60;
它会给你当前时间,以及一个从 0 到 n-1 的数字,其中 n=60。要每 5 分钟执行一次,请将该数字设置为 300,依此类推。它按自一天开始以来的秒数进行分组。要使其按自年开始、小时开始或其他时间开始的秒数分组,请更改 date_trunc 中的“d”。