具有随机时间点的 Influxdb 导数
Influxdb derivative with random time points
我有一些随机时间分隔点的值,我想要每一行与前一行之间的差异:
time name value
1440972000000000000 Froid 328
1443736800000000000 Froid 332
1444687200000000000 Froid 333
1445900400000000000 Froid 335
1447110000000000000 Froid 336
1447974000000000000 Froid 337
1448578800000000000 Froid 337.9
1449097200000000000 Froid 338.4
1449702000000000000 Froid 338.7
1450825200000000000 Froid 339.8
1452985200000000000 Froid 341.4
1454194800000000000 Froid 342.4
我想我应该为此使用导数函数,但我一直没有正确的单位或值。
例如:SELECT derivative(value) FROM water where "name" = 'Froid'
name: water
-----------
time derivative
1443736800000000000 1.4467592592592592e-06
1444687200000000000 1.0521885521885521e-06
1445900400000000000 1.6485328058028355e-06
1447110000000000000 8.267195767195768e-07
1447974000000000000 1.1574074074074074e-06
1448578800000000000 1.4880952380952004e-06
1449097200000000000 9.645061728395062e-07
1449702000000000000 4.960317460317649e-07
1450825200000000000 9.793447293447496e-07
1452985200000000000 7.40740740740725e-07
1454194800000000000 8.267195767195768e-07
我想要这样的东西:
1443736800000000000 4 # (332 - 328)
1444687200000000000 1 # (333 - 332)
1445900400000000000 2 # (335 - 333)
[...]
我不知道该怎么做才能得到这个结果。
我认为 DERIVATIVE
可能不是您认为的那样。 DIFFERENCE might on the other hand be what you're looking for, but it seems that it's not implemented yet..
不过,您可能可以使用 continuous queries in combination with LAST 来完成此操作,直到实现差异为止。然而,这有点老套,CQ 执行的间隔可能需要与你的积分进入的速度相同。
另一种解决方案是简单地获取数据库中的内容,然后在应用程序内部进行计算,这是一种内存方法。如果您一次获取的点数不多,那么这真的不是问题。
DERIVATIVE 是你想要的,但默认情况下它给出每秒的变化率。您需要每个时间间隔的变化率,而不是每秒,因此您需要指定计算变化率的时间间隔。您的积分相隔 2764800 秒,因此您的查询应为 SELECT derivative(value, 2764800) FROM water where "name" = 'Froid'
我有一些随机时间分隔点的值,我想要每一行与前一行之间的差异:
time name value
1440972000000000000 Froid 328
1443736800000000000 Froid 332
1444687200000000000 Froid 333
1445900400000000000 Froid 335
1447110000000000000 Froid 336
1447974000000000000 Froid 337
1448578800000000000 Froid 337.9
1449097200000000000 Froid 338.4
1449702000000000000 Froid 338.7
1450825200000000000 Froid 339.8
1452985200000000000 Froid 341.4
1454194800000000000 Froid 342.4
我想我应该为此使用导数函数,但我一直没有正确的单位或值。
例如:SELECT derivative(value) FROM water where "name" = 'Froid'
name: water
-----------
time derivative
1443736800000000000 1.4467592592592592e-06
1444687200000000000 1.0521885521885521e-06
1445900400000000000 1.6485328058028355e-06
1447110000000000000 8.267195767195768e-07
1447974000000000000 1.1574074074074074e-06
1448578800000000000 1.4880952380952004e-06
1449097200000000000 9.645061728395062e-07
1449702000000000000 4.960317460317649e-07
1450825200000000000 9.793447293447496e-07
1452985200000000000 7.40740740740725e-07
1454194800000000000 8.267195767195768e-07
我想要这样的东西:
1443736800000000000 4 # (332 - 328)
1444687200000000000 1 # (333 - 332)
1445900400000000000 2 # (335 - 333)
[...]
我不知道该怎么做才能得到这个结果。
我认为 DERIVATIVE
可能不是您认为的那样。 DIFFERENCE might on the other hand be what you're looking for, but it seems that it's not implemented yet..
不过,您可能可以使用 continuous queries in combination with LAST 来完成此操作,直到实现差异为止。然而,这有点老套,CQ 执行的间隔可能需要与你的积分进入的速度相同。
另一种解决方案是简单地获取数据库中的内容,然后在应用程序内部进行计算,这是一种内存方法。如果您一次获取的点数不多,那么这真的不是问题。
DERIVATIVE 是你想要的,但默认情况下它给出每秒的变化率。您需要每个时间间隔的变化率,而不是每秒,因此您需要指定计算变化率的时间间隔。您的积分相隔 2764800 秒,因此您的查询应为 SELECT derivative(value, 2764800) FROM water where "name" = 'Froid'