TDengine执行带interval和fill的SQL报不兼容错误如何解决?
报错原因
- 该报错的核心原因是TDengine的
interval时间窗口语法必须搭配聚合函数使用,不能直接用select *查询全列。interval的作用是将查询的时间范围按指定间隔切分为多个独立窗口,每个窗口需要明确的聚合计算规则(如last、avg、sum、max等),没有指定聚合逻辑时系统就会抛出函数与interval不兼容的错误,该报错和fill(prev)参数无关。
解决方法
- 首先明确你每个10分钟窗口需要的计算逻辑,替换
select *为指定字段+对应聚合函数即可。
如果你需要取每个窗口的最新值做填充,示例改写如下(将disk_total替换为你实际要查询的数值字段即可):select last(disk_total) from taos_dn_disk_total where ts >= NOW-1d and ts <= NOW interval(10m) fill(prev); - 如果需要同时返回标签字段,标签字段可直接写在select后,不需要加聚合函数,示例:
select host_tag, last(disk_total) from taos_dn_disk_total where ts >= NOW-1d and ts <= NOW interval(10m) fill(prev); - 如果需要查询多个数值字段,给每个数值字段都加上对应的聚合函数即可,示例:
select last(disk_total), last(disk_used) from taos_dn_disk_total where ts >= NOW-1d and ts <= NOW interval(10m) fill(prev);
内容的提问来源于stack exchange,提问作者naissance
相关产品推荐
相关产品推荐

