给定时间序列范围,其值 v0-v5 以不规则间隔存储在 timescaledb 中。
v0 v1 v2 v3 v4
t0 - t1 - t2 - t3 - t4 - t5
选择了从 >=t2 到 <=t4 的范围,从而得到 v2 和 v3。
select time from table where time >= t2 and time <=t4 order by ASC
此外,我想获得范围之后的第一个和范围之前的第一个,因此 v1 和 v4。这些值不均匀,所以我不知道 t1 或 t4 是什么时候。可以是毫秒或年。
未测试,但我想我可以按照 TimescaleDB: efficiently select last row 中的说明执行此操作吗?
第一版
select time from table where time < t2 order by desc LIMIT 1
第四版
select time from table where time > t4 order by asc LIMIT 1
但这需要进行三个查询,是否有办法使其在 timescaledb 中更高效?
最佳答案
您可以使用子查询来实现此目的:(范围为 '2021-04-01 04:04:00'
- '2021-04-01 04:07 的示例查询: 00'
)
SELECT time FROM table
WHERE
(time >= timestamp '2021-04-01 04:04:00' AND time <= timestamp '2021-04-01 04:07:00')
OR time = (SELECT time FROM table WHERE time < timestamp '2021-04-01 04:04:00' ORDER BY time DESC LIMIT 1)
OR time = (SELECT time FROM table WHERE time > timestamp '2021-04-01 04:07:00' ORDER BY time ASC LIMIT 1)
ORDER BY time
关于Timescaledb:获取范围前后的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69130614/