Timescaledb:获取范围前后的第一个值

Timescaledb: get first value before and after range

给定时间序列范围,其值 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

中的说明执行此操作

v1

select time from table where time < t2 order by desc LIMIT 1

v4

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