time_bucket
功能描述
time_bucket时间范围对齐函数,用于将一个时间按照bucket_width对齐到一个时间点,方便后续对时间聚合。
注意事项
使用time_bucket时,由于offset与origin是互斥的参数,所以time_bucket的第三个参数可能是offset(interval 类型),也可能是origin(timestamp 类型)。为了方便区分是offset还是origin使用时,如果使用offset或者origin需要显式指定第三个参数的类型,如:
select time_bucket('5minute',time,'2001-1-1 00:00:00'::timestamp) as bucket ,count(temperature) from weather group by bucket order by bucket asc;
或者
select time_bucket('1minute',time,'1minute'::interval) as bucket ,count(temperature) from weather group by bucket order by bucket asc;
语法格式
time_bucket(bucket_width, time,[offset | origin])
参数说明
参数名 | 类型 | 属性 | 释义 |
---|---|---|---|
bucket_width | TEXT | 必选 | 对齐的时间间隔。只能使用'正整数+时间标识'的方式,时间标识包括interval类型支持的所有单位,包括'microsecond,millisecond,second,minute,hour,day,week,month,year,decade,century,millennium' 及这些单位的复数形式,如years、months、days等和简写形式,如y、m、d等。 |
time | TIMESTAMP | 必选 | 需要对齐的时间。 |
offset | INTERVAL | 可选 | 使用这个值调整对齐窗口位置,如果是正值,时间窗口整体向将来移动,如果是负值,窗口位置向过去移动。相当于将默认的origin移动offset的位置。 |
origin | TIMESTAMP | 可选 | 对齐的base,默认从’2001-1-1 00:00:00’对齐;此参数与offset互斥。 |
示例
Uqbar=# select * from t1 order by time;
time | id | value
------------------------+----+-------
2022-06-02 00:01:00+08 | 1 | 9
2022-06-02 00:04:00+08 | 1 | 11
2022-06-02 00:06:00+08 | 1 | 10
2022-06-02 00:07:00+08 | 1 | 11
2022-06-02 00:15:00+08 | 1 | 12
(5 rows)
Uqbar=# select time_bucket('2 minute',time) as bucket, sum(value) from t1 group by bucket order by bucket;
bucket | sum
------------------------------------+-----
2022-06-02 00:00:00+08 | 9
2022-06-02 00:04:00+08 | 11
2022-06-02 00:06:00+08 | 21
2022-06-02 00:14:00+08 | 12
(4 rows)