按自定义间隔对数据进行分组的 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 小时),然后将其四舍五入以供按语句分组使用
我有一个工作查询,允许我每天对 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 小时),然后将其四舍五入以供按语句分组使用