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:查询"按分钟"运行的行数
这是一个简单的查询,您可以将其包装在函数中,也可以在各处剪切和粘贴:
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 次 |
| 最近记录: |