【发布时间】:2019-01-22 04:40:33
【问题描述】:
一般任务
一个表由三列组成(time、key、value)。任务是计算每个键的运行差异。 所以,从输入
---------------
| time | key | value |
---------------
| 1 | A | 4 |
| 2 | B | 1 |
| 3 | A | 6 |
| 4 | A | 7 |
| 5 | B | 3 |
| 6 | B | 7 |
希望得到
----------------------
| key | value | delta |
----------------------
| A | 4 | 0 |
| B | 1 | 0 |
| A | 6 | 2 |
| A | 7 | 1 |
| B | 3 | 2 |
| B | 7 | 4 |
方法
-
runningDifference函数。工作,如果密钥是固定的。所以我们可以select *, runningDifference(value) from (SELECT key, value from table where key = 'A' order by time)请注意,这里需要子查询。当您想为不同的 keys
获取此解决方案时,此解决方案会受到影响 -
groupArray.select key, groupArray(value) from (SELECT key, value from table order by time) group by key所以,现在我们得到一个键和一个带有这个键的元素数组。很好。
但是如何计算滑动差?如果我们能做到这一点,那么
ARRAY JOIN将引导我们找到结果。或者我们甚至可以使用
zip数组本身,然后应用 lambda(为此我们有arrayMap)但是......我们没有任何zip替代方案。
有什么想法吗? 提前致谢。
【问题讨论】:
标签: clickhouse