假设一个非常简单的表格:
一列
ts
(纳米时间戳类型),
一列
value
(双精度型)。
我想每小时采样一次
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:00 间隙。
有没有办法准确生成代表真实“最后看到的值”的样本?
可以使用‘区间’进行统计并填写指定范围。
select last(val)
from t
group by interval(ts, 1s, `prev)
您可以使用
fill
指定的最后一个可用值来填充缺失时间戳的数据。
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
......