Twa算出来的结果不符合预期

【TDengine 使用环境】
测试

【TDengine 版本】

3.4.1.0

【操作系统以及版本】

centos7.9

【部署方式】容器

SELECT _wstart, _wend, device_id,

   TWA(zlgl) **AS** *\`value\`*

FROM product_nbq

WHERE device_id IN (2072981781495152641)

AND zlgl IS NOT NULL

AND zlgl >= 0

AND ts >= ‘2026-07-09 00:00:00’

AND ts <= ‘2026-07-09 23:59:59.999’

PARTITION BY device_id

INTERVAL(1h)

使用这个sql算出来的结果有负数,但是实际原表里这一列没有负数。并且用了过滤。

但是时间范围缩短负数就没了,但是结果是错的。

SELECT device_id,

   TWA(zlgl) **AS** *\`value\`*

FROM product_nbq

WHERE device_id IN (2072981781495152641)

AND zlgl IS NOT NULL

AND zlgl >= 0

AND ts >= ‘2026-07-09 09:00:00’

AND ts < ‘2026-07-09 10:00:00’

PARTITION BY device_id

INTERVAL(1h)

最后发现 interval 去掉,不走时间窗口,单独查结果就正确了。这是为什么。

select device_id,

   TWA(zlgl) **AS** *twa_value*

FROM product_nbq

WHERE device_id in (2072981781495152641)

AND ts >= ‘2026-07-09 09:00:00’

AND ts < ‘2026-07-09 10:00:00’

PARTITION BY device_id

尝试一下以下语句:

sql
SELECT _wstart, _wend, device_id, TWA(zlgl) AS value
FROM product_nbq
WHERE device_id IN (2072981781495152641)
AND zlgl IS NOT NULL
AND zlgl >= 0
AND ts >= ‘2026-07-09 00:00:00’
AND ts <= ‘2026-07-09 23:59:59.999’
PARTITION BY device_id
INTERVAL(1h)
FILL(PREV); – 使用前一个有效值填充

仍然有负值

请将这个查询的原始数据查询出来给我们试试。

SELECT _c0,zlgl,device_id
FROM product_nbq

WHERE device_id IN (2072981781495152641)

AND zlgl IS NOT NULL

AND zlgl >= 0

AND ts >= ‘2026-07-09 09:00:00’

AND ts < ‘2026-07-09 10:00:00’ >> zlgl.csv;

将这个csv文件给我们,我们在自己环境复现一下看看。