我希望我能够很好地解释这个和我的用例。我有一堆由algo
列拆分的数据,每个字段都有不同的值,我的目标是得到每5分钟报告一次的值。
这可以通过以下方式实现:
> use testdb
Using database testdb
> SELECT sum("value") FROM "balance" group by time(5m) order by time desc limit 20
name: balance
-------------
time sum
1516268400000000000
1516268100000000000
1516267800000000000
1516267500000000000
1516267200000000000
1516266900000000000
1516266600000000000
1516266300000000000 0.00675834
1516266000000000000 0.00675797
1516265700000000000 0.00675691
这提出了两个问题。
1516266600000000000
之后我没有参赛作品。对我来说这是预期的行为,每个后续的总和应该是它能找到的最接近的条目。这里的所有空白都应该是0.00675834
。algo
缺少数据点,则总和将不包含该数据。可视化我想要实现的目标:
Time | Algo a | Algo b | Algo c
------|--------|--------|---------
5 | 10 | | 34
4 | 10 | 23 | 31
3 | 9 | 23 |
2 | | | 20
1 | 4 | 23 | 20
如果我想在时间5之间选择,那么它将是10,23的总和(因为它是最接近的前一个条目)和34. 67 。
如果我想在时间3选择,那么它将是9,23和20. 52 。
问题的第一部分:我如何获得这样的价值?
问题的第二部分:我如何扩展它以找到我的两个例子的delta来输出15?
> select * from "balance"
name: balance
-------------
time algo value mode
1514205000000000000 AlgoA 0.00000778 debug
1514205000000000000 AlgoB 0.00004702 debug
1514205000000000000 AlgoC 0.00002564 debug
1514205000000000000 AlgoD 0.00000335 debug
1514205000000000000 AlgoE 0.00014048 debug
1514205000000000000 AlgoG 0.00050431 debug
1514205000000000000 AlgoH 0.00000164 debug
1514205300000000000 AlgoA 0.00000778 debug
1514205300000000000 AlgoB 0.00004702 debug
1514205300000000000 AlgoC 0.00002564 debug
1514205300000000000 AlgoD 0.00000335 debug
1514205300000000000 AlgoF 0.00002664 debug
1514205300000000000 AlgoG 0.00050431 debug
1514205300000000000 AlgoH 0.00000164 debug
1514205600000000000 AlgoA 0.00000778 debug
1514205600000000000 AlgoB 0.00004702 debug
1514205600000000000 AlgoC 0.00002564 debug
1514205600000000000 AlgoD 0.00000335 debug
1514205600000000000 AlgoE 0.00014048 debug
1514205600000000000 AlgoF 0.00002664 debug
1514205600000000000 AlgoG 0.00050431 debug
1514205900000000000 AlgoA 0.00000778 debug
1514205900000000000 AlgoB 0.00004702 debug
1514205900000000000 AlgoC 0.00002564 debug
1514205900000000000 AlgoD 0.00000335 debug
1514205900000000000 AlgoE 0.00014048 debug
1514205900000000000 AlgoF 0.00002664 debug
答案 0 :(得分:0)
好的,让我想出它似乎是什么,你确认或纠正这些假设。
看起来像:
你有一个5分钟的时间序列。
其中的值除以algo
s
预计每个系列每algo
有0到1分
您需要的是 - 此5分钟系列中所有algo
的总和。
虽然,如果特定algo
的系列中没有任何意义 - 它应该替换上一系列中的最后一个可用值。
这是对的吗?
UPDATE 事实证明这是正确的。
然后尝试以下方法。
首先,由于您希望每个系列不超过一个具有特定算法标记的值,因此您可以在按时间分组时安全地应用LAST()。这里的技巧是使用fill()选项进行时间分组,如:
SELECT LAST("value"), algo FROM "balance" WHERE time > now() - 6h GROUP BY time(5m) fill(previous)
如果系列中没有,那么显然会给你想要的前一个点值。
下一步,总结此查询的结果:
SELECT SUM(lv) FROM (SELECT LAST("value") as lv FROM "balance" WHERE time > now() - 6h GROUP BY time(5m) fill(previous)) WHERE time > now() - 6h GROUP BY time(5m)
这会让你回答第一个问题。 我希望。 : - )