按自定义间隔对数据进行分组的 PostgreSQL / TimescaleDB 查询

PostgreSQL / TimescaleDB query that group data by custom interval

我有一个工作查询,允许我每天对 value 字段求和。

SELECT sum(value) as sum_value, to_char(time::date,'DD-MM-YY') as day 
FROM "measures"  
GROUP BY "day" 
ORDER BY "day" asc

是否可以执行相同的查询,但不是按天分组,而是按 2 天或特定持续时间(仅天数,而不是小时数)分组

您可以使用 timescaledb 扩展 time_bucket() 功能,正如@Mike Organek 评论的那样,或者使用原生 PosgreSQL 数据转换,例如:

SELECT 
    sum(value) as sum_value, 
    to_char(time::date,'DD-MM-YY') as day,
    floor(extract(epoch from "time")/(60*60*24*2)) as time_bucket
FROM "measures"  
GROUP BY "time_bucket" 
ORDER BY "day" asc;

在上面的查询中,我们从 datetime 列中提取 unixtime,将其划分为以秒为单位的分组周期(60*60*24*2 - 表示 2 天或 48 小时),然后将其四舍五入以供按语句分组使用