可能重复:
What is the fastest way to truncate timestamps to 5 minutes in Postgres?
Postgresql SQL GROUP BY time interval with arbitrary accuracy (down to milli seconds)
我想在PostgreSQL中以5分钟的间隔聚合数据。如果我使用date_trunc()
功能,我可以按小时,每月,每天,每周等间隔汇总数据,但不是5分钟或5天等特定时间间隔。
select date_trunc('hour', date1), count(*) from table1 group by 1;
有谁知道我们如何在PostgreSQL中实现这一目标?
感谢任何帮助。
答案 0 :(得分:19)
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
会截断小数位。结果:
分钟0 - 4 - >插槽0
分钟5 - 9 - >插槽1
等
此查询仅返回找到值的5分钟插槽的值。如果您想要每个插槽的值,或者想要在5分钟的插槽中使用运行总和,请考虑以下相关答案:
PostgreSQL: running count of rows for a query 'by minute'
答案 1 :(得分:0)
这是一个简单的查询,您可以将其包装在函数中,也可以剪切并粘贴到整个地方:
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”。