使用InfluxDB,我正在尝试生成一个输出,显示从零开始的一段时间内的累积降雨量 .

降雨传感器输出累积降雨量,但在停电,重启等时重置为零 .

我的第一个查询组件使用 non_negative_difference() 来显示增量 .

select 
    non_negative_difference(rain) as nnd 
FROM 
    weather  
WHERE 
    $time_query

....每个原始数据点产生一个增量,例如:

2018-06-01T14:21:00.926Z 0
2018-06-01T14:22:02.959Z 0.30000000000000426
2018-06-01T14:23:04.992Z 0.3999999999999986
2018-06-01T14:24:07.024Z 0.10000000000000142
2018-06-01T14:25:09.059Z 0.19999999999999574
2018-06-01T14:26:11.094Z 0
2018-06-01T14:27:13.127Z 0.10000000000000142
2018-06-01T14:28:15.158Z 0.20000000000000284
2018-06-01T14:29:20.027Z 0.09999999999999432
2018-06-01T14:30:22.476Z 0.10000000000000142
2018-06-01T14:30:53.918Z 0.6000000000000014
2018-06-01T14:31:55.968Z 0.5
2018-06-01T14:32:58.007Z 0.5
2018-06-01T14:34:00.046Z 0.20000000000000284
2018-06-01T14:35:02.075Z 0.3999999999999986
2018-06-01T14:36:04.102Z 0.3999999999999986
2018-06-01T14:37:06.136Z 0.20000000000000284
2018-06-01T14:38:08.201Z 0

So far so good.

我现在正试图将这些读数重新拼成累计总数,从预期的零点开始 .

我可以使用 cumulative_sum() ,例如:

SELECT 
    cumulative_sum(nnd) 
FROM 
    (SELECT 
        non_negative_difference(rain) as nnd 
     FROM 
        weather
     WHERE 
        $time_query )

产量:

2018-06-01T14:21:00.926Z 0
2018-06-01T14:22:02.959Z 0.30000000000000426
2018-06-01T14:23:04.992Z 0.7000000000000028
2018-06-01T14:24:07.024Z 0.8000000000000043
2018-06-01T14:25:09.059Z 1
2018-06-01T14:26:11.094Z 1
2018-06-01T14:27:13.127Z 1.1000000000000014
2018-06-01T14:28:15.158Z 1.3000000000000043
2018-06-01T14:29:20.027Z 1.3999999999999986
2018-06-01T14:30:22.476Z 1.5
2018-06-01T14:30:53.918Z 2.1000000000000014
2018-06-01T14:31:55.968Z 2.6000000000000014
2018-06-01T14:32:58.007Z 3.1000000000000014
2018-06-01T14:34:00.046Z 3.3000000000000043
2018-06-01T14:35:02.075Z 3.700000000000003
2018-06-01T14:36:04.102Z 4.100000000000001
2018-06-01T14:37:06.136Z 4.300000000000004
2018-06-01T14:38:08.201Z 4.300000000000004

Looking good!

现在我想把它分成更明确的时间桶,以获得漂亮的图形 .

我们试试吧....

SELECT 
    cumulative_sum(max(nnd))
FROM (SELECT 
          non_negative_difference(rain) as nnd 
      FROM 
          weather
      WHERE
          $time_query)
GROUP BY
    time(5m)

我收到一个错误: ERR: aggregate function required inside the call to non_negative_difference

但我找不到合理的方法来添加聚合和分组到 non_negative_difference() ,这不会影响差异函数本身的准确性 .

我唯一能做的就是随时间变化的虚拟聚合SUM()小于传感器周期 . 但这对我的喜好来说还不够健壮 - (我仍然不确定它是100%正确的)

我必须将两个查询都作为聚合查询,这是否正确?