我有一些随机时间分隔点的值,我希望每一行与它的前一行之间存在差异:
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衍生物(值)FROM water其中" 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)
[...]
我不知道如何处理这个结果。
答案 0 :(得分:1)
DERIVATIVE是你想要的,但默认情况下它会给出每秒的变化率。您需要每个时间间隔而不是每秒的变化率,因此您需要指定计算速率的时间间隔。您的积分是2764800秒,因此您的查询应为SELECT derivative(value, 2764800) FROM water where "name" = 'Froid'
答案 1 :(得分:0)
我认为DERIVATIVE
可能不符合您的想法。另一方面,DIFFERENCE可能是您正在寻找的内容,但它似乎是not implemented yet ..
然而,您可以将continuous queries与LAST结合使用,直到实现DIFFERENCE为止。然而,这有点hacky并且CQ执行的间隔可能需要与您的积分进入的速率相同。
另一种解决方案是简单地获取数据库中的内容,然后在应用程序内部进行计算,这是一种内存中的方法。如果你没有一次获得太多积分,那么它就不应该成为一个问题。