按秒采样并填充没有数据的时间段

假设一个非常简单的表:

一列 ts(nanotimestamp),一列 value(double)。
我想要对 value 值做每秒一次的采样,标准写法应该是这样:

ts = 2024.03.26T09:30:00.005 2024.03.26T09:31:00.123 2024.03.26T10:30:00.105
val = 1.5 2.5 2.0
t = table(ts, val)

select last(val)
from t
group by bar(ts, 1s)
order by bar_ts
-----------------------------


bar_ts              last_val
------------------- --------
2024.03.26T09:30:00 1.5     
2024.03.26T09:31:00 2.5     
2024.03.26T10:30:00 2 


问题是,这样得出的结果并不是精确的 3600 条数据,因为数据在时间轴上并不是均匀的,有时候一两秒都没有一个值,会出现缺失的时间段,如上图的09:32:00至10:29:59。

有没有能准确生成真正 last seen value 采样的办法?


请先 登录 后评论

1 个回答

peter

可以使用interval对指定的区间进行统计并填充

select last(val)
from t
group by interval(ts, 1s, `prev)

对没有对应时间的数据进行填充(这里使用前一个有值的时刻)

interval_ts         last_val
------------------- --------
2024.03.26T09:30:00 1.5     
2024.03.26T09:30:01 1.5     
2024.03.26T09:30:02 1.5     
2024.03.26T09:30:03 1.5     
2024.03.26T09:30:04 1.5     ......
请先 登录 后评论