post_SQL中的date_trunc 5分钟间隔

时间:2012-08-28 19:05:14

标签: sql postgresql datetime aggregate-functions

  

可能重复:
  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中实现这一目标?

感谢任何帮助。

2 个答案:

答案 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”。