date_trunc PostgreSQL中的5分钟间隔[重复]

x759pob2  于 12个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(113)

此问题已在此处有答案

11年前关闭。

可能重复:

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中实现这一点?

f45qwnt8

f45qwnt81#

Postgres 14或更高版本

使用**date_bin()**:

SELECT date_bin('5 min', date1, '2000-1-1') AS min5_slot
     , count(*)
FROM   table1
GROUP  BY 1
ORDER  BY 1;

请参阅:

  • 在Postgres中将时间戳缩短到5分钟的最快方法是什么?

Postgres 13或更高版本

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 - 12,请添加1
我将extract()的结果转换为整数,因此除法/ 5会截断小数位。结果:
分钟0 - 4 ->插槽0
分钟5 - 9 ->插槽1

此查询仅返回找到值的那些5分钟时段的值。如果你想要一个值为 * 每 * 插槽或如果你想要一个 * 运行总和 * 超过5分钟插槽,考虑这个相关的答案:

  • PostgreSQL:运行查询的行数'按分钟'
ebdffaop

ebdffaop2#

这里有一个简单的查询,你可以 Package 在一个函数中,也可以剪切和粘贴在所有的地方:

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

相关问题