post_SQL中的date_trunc 5分钟间隔

pra*_*ekk 20 sql postgresql datetime aggregate-functions

可能重复:
在Postgres中将时间戳截断为5分钟的最快方法是什么?
Postgresql SQL GROUP BY时间间隔,任意精度(低至毫秒)

我想在PostgreSQL中以5分钟的间隔聚合数据.如果我使用该date_trunc()功能,我可以按小时,每月,每日,每周等间隔汇总数据,但不是5分钟或5天等特定间隔.

select date_trunc('hour', date1), count(*) from table1 group by 1;
Run Code Online (Sandbox Code Playgroud)

有谁知道我们如何在PostgreSQL中实现这一目标?

任何帮助表示赞赏.

Erw*_*ter 23

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;
Run Code Online (Sandbox Code Playgroud)

您可以使用GROUP BY两列:时间戳截断为小时和5分钟的插槽.

该示例生成插槽 0 - 11.添加1,如果你喜欢1 - 12.
我将结果转换extract()为整数,因此除法会/ 5截断小数位.结果:
分0 - 4 - >槽0
分钟5 - 9 - >槽1

此查询仅返回找到值的5分钟槽的值.如果你想为每个插槽一个值,或者如果你想要一个超过5分钟的插槽的运行总和,请考虑以下相关答案:
PostgreSQL:查询"按分钟"运行的行数

  • 来学习DATE_TRUNC;学习了 GROUP BY 1, 2 (5认同)

Sco*_*owe 2

这是一个简单的查询,您可以将其包装在函数中,也可以在各处剪切和粘贴:

select now()::timestamp(0), (extract(epoch from now()::timestamptz(0)-date_trunc('d',now()))::int)/60;
Run Code Online (Sandbox Code Playgroud)

它会给你当前时间,以及一个从 0 到 n-1 的数字,其中 n=60。要每 5 分钟执行一次,请将该数字设置为 300,依此类推。它按自一天开始以来的秒数进行分组。要使其按自年开始、小时开始或其他时间开始的秒数分组,请更改 date_trunc 中的“d”。


归档时间:

查看次数:

27252 次

最近记录:

12 年,11 月 前