微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

点击屋如何创建一个保留另一列中最后一个值的列?

如何解决点击屋如何创建一个保留另一列中最后一个值的列?

我想弄清楚如何在 Clickhouse 中制作下表中名为“我想要”的列:

类别 行号 我有什么 我想要的
A 1 0 0
A 2 1 1
B 3 0 1
B 4 0 1
A 5 3 3
B 6 0 3
B 7 0 3
A 8 2 2
B 9 0 2

有两个类别A和B。 而且我希望 B 类别“记住”来自 A 类别的最新值。

有一列用于对所有记录进行排序:行号。

我发现了一个看起来很有希望的函数 arrayFill,但不幸的是,我的服务器版本 (19.14.11.16) 不支持它,而且它不可能很快更新。 >

我想 clickhouse 数组应该有一些技巧。但我没有设法找到方法。有没有clickhouse-ninja 可以给我一个提示如何处理它?

附言事实上,B 类别不是零填充,但我提供它只是为了简化我的问题。

解决方法

create table z(c String,rn Int64,hv Int64) Engine=Memory;

insert into z values ('A',1,0)('A',2,1)('B',3,0)('B',4,5,3)('B',6,7,8,2)('B',9,0);

select (arrayJoin(flatten(arrayMap( j -> arrayMap(m -> if(m.1 = 'B',(m.1,m.2,ga1[j-1][-1].3),m),ga1[j]),arrayEnumerate(arraySplit(k,i -> ga[i].1 <> ga[i-1].1,(groupArray( (c,rn,hv) ) as ga),arrayEnumerate(ga)) as ga1)))) as r).1 _c,r.2 _rn,r.3 _n
from (select * from z order by rn)


┌─_c─┬─_rn─┬─_n─┐
│ A  │   1 │  0 │
│ A  │   2 │  1 │
│ B  │   3 │  1 │
│ B  │   4 │  1 │
│ A  │   5 │  3 │
│ B  │   6 │  3 │
│ B  │   7 │  3 │
│ A  │   8 │  2 │
│ B  │   9 │  2 │
└────┴─────┴────┘

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。