TDengine时间窗口查询如何用前一个非空值填充缺失数据?
TDengine秒级统计补全缺失数据的SQL修改方案
你的问题核心在于:用first(ts)作为时间字段时,无数据的区间不会生成对应行,导致FILL(PREV)没有可填充的行对象,自然无法生效。
修改后的SQL语句如下:
SELECT _wstart, last(voltage) FROM d1 WHERE ts >= '2017-07-14 10:40:00.000' AND ts <= '2017-07-14 10:41:00.066' INTERVAL(1s) FILL(PREV);
关键调整说明:
- 用
_wstart替代first(ts):_wstart是TDengine为INTERVAL查询自动生成的区间起始时间字段,它会为每个指定的秒级区间强制生成一行记录,不管该区间有没有原始数据 - 聚合函数选择:
last(voltage)会取每个秒级区间内最后一条非空的电压值;如果你的需求是取区间内第一条值,换成first(voltage)即可 FILL(PREV):现在每个区间都有行对象,当某个区间的voltage为null时,就会自动用前一个非null的电压值填充
内容的提问来源于stack exchange,提问作者superman
相关产品推荐
相关产品推荐

