我有这个表,我想为几行添加'change'列的值(或者,更确切地说,从'ne'值为零的行到下一行,其中包括'ne'的零(不是第二行本身))。任何答复都将不胜感激。
┌─rn─┬───────date─┬─ne─┬───────change─┐
│ 0 │ 2008-12-07 │ 0 │ -10330848398 │
│ 1 │ 2009-04-14 │ 1 │ -61290 │
│ 2 │ 2009-04-26 │ 1 │ 9605743360 │
│ 3 │ 2013-07-06 │ 0 │ -32028871920 │
│ 4 │ 2014-01-12 │ 1 │ -42296164902 │
│ 5 │ 2015-06-08 │ 1 │ 59100383646 │
└────┴────────────┴────┴──────────────┘
我们期望的结果是这样的。
row start end sum(change)
--------------------------------------------------
0 | 2008-12-07 | 2009-04-26 | -725,166,328
--------------------------------------------------
1 | 2013-07-06 | 2015-06-08 | -15,224,653,176
--------------------------------------------------
5条答案
按热度按时间oipij1gg1#
在bigdata(>1亿行)中是无法解决的
ffx8fchx2#
这是一个缺口和孤岛问题。规范的解决方案确实使用了窗口函数,而clickhouse不支持这些函数。
下面是一种使用子查询模拟条件窗口和的方法:
子查询统计有多少行
ne = 0
从表的第一行到当前行。这定义了记录组。那么剩下要做的就是聚合。如果您可以使用窗口函数,您可以将其表述为:
xpcnnkqh3#
只是解决此任务的另一种方法:
样本数据测试:
snz8szmq4#
选择ne,min(日期)作为开始,max(日期)作为结束,sum(更改)作为更改组by ne
ipakzgxi5#
假设clickhouse支持变量: