【发布时间】:2021-10-30 04:47:33
【问题描述】:
我有一个包含时间序列数据的 postgres timescaleDB 数据库。 表流中的数据大约每 500ms 采样一次。
我需要每 1 秒获取一次数据。 我试着用 time_bucket() 函数来做。
这是我的测试查询:
SELECT time_bucket('1 second', time) AS bucket, value AS val
FROM flows fl
WHERE
fl.time > '2021-08-31 06:14:00+00' AND
fl.time <= '2021-08-31 06:18:00+00' AND
fl.sensor_id = 2
ORDER BY fl.time ASC;
返回的数据如下:
|bucket |val |
| ---------------------- | ------------------- |
| 2021-08-31 06:14:00+00 | 9.75071040883207 |
| 2021-08-31 06:14:00+00 | 10.008532745208633 |
| 2021-08-31 06:14:01+00 | 9.953632354528265 |
| 2021-08-31 06:14:01+00 | 9.833033340905137 |
| 2021-08-31 06:14:02+00 | 9.77205680132453 |
| 2021-08-31 06:14:02+00 | 10.197350449765523 |
| ... | ... |
如您所见,一秒钟的每个桶有两行。值来自每 500 毫秒收集一次的样本。
如何确保每个存储桶只有一个值? (在我的例子中:每秒一个值)
我还尝试了对值的聚合函数 (avg),但这并没有改变结果。
【问题讨论】:
标签: sql postgresql timescaledb