1

我创建了一个超表 water_meter 来存储传感器数据

它包含以下按时间戳升序排列的数据

select * from water_meter order by time_stamp;

点击这里查看上述查询的结果

可以看出我的数据从01 May 2020

如果我使用 time_bucket() 函数来获取每 1 天的聚合:

SELECT
time_bucket('1 days', time_stamp) as bucket,
thing_key,
avg(pulsel) as avg_pulse_l,
avg(pulseh) as avg_pulse_h
FROM
water_meter
GROUP BY thing_key, bucket;

它工作正常,我得到以下数据:

查看 time_bucket('1 day') 的结果

现在,如果我使用它来获取 15 天的聚合,我会得到意想不到的结果,其中显示了 的开始时间段17 April 2020,而表中没有数据

SELECT
time_bucket('15 days', time_stamp) as bucket,
thing_key,
avg(pulsel) as avg_pulse_l,
avg(pulseh) as avg_pulse_h
FROM
water_meter
GROUP BY thing_key, bucket;

点击查看 time_bucket('15 days') 的结果

4

1 回答 1

2

time_bucket函数将事物存储到具有隐含范围的存储桶中,即 15 分钟存储桶可能显示为 '2021-01-01 01:15:00.000+00' 或其他内容,但它将包含范围 ['2021-01 -01 01:15:00', '2021-01-01 01:30:00') - 包含在左侧,不包含在右侧。同样的事情发生了好几天。存储桶已确定并且恰好在 4 月 17 日开始,但将包含以下范围内的数据:["2020-04-17 00:00:00+00","2020-05-02 00:00:00 +00”)。您可以使用TimescaleDB Toolkit 扩展中的实验函数来获取这些范围:SELECT toolkit_experimental.time_bucket_range('15 days'::interval, '2020-05-01');

也可以使用time_bucket 函数的 offset 或 origin 参数来修改 start:select time_bucket('15 days'::interval, '2020-05-01', origin=>'2020-05-01');

于 2021-07-24T15:43:22.483 回答