>我有一个按pt分区的表。数据:
K V PT
100 1 20150101
101 1 20150102
100 1 20150103
我想使用 wm_concat 来获得这样的结果,其中填充为 0 的分区中不存在 k:
凯特斯
100 1,0,1
101 0,1,0
但我只能得到这样的结果:
凯特斯
100 1,1
101 1
蜂巢脚本如下:
select m1.k, wm_concat(',', m1.v) as ts
from
(
select k, v, pt
from test_table
where pt <= ${date}
order by pt
) m1
group by m1.k
实现此目的的一种方法是首先使用不同分区的子查询进行交叉连接,并计算一个新的"v"列,当特定 k 的 pt 存在时,该列的值为 1,否则值为 0。然后你需要取每个k的最大值,v对按pt分组。我的意思是:
select k, max(if(pt_join.pt == tb.pt, 1, 0)) as v, pt_join.pt as pt
from test_table tb
cross join (select distinct pt
from test_table) pt_join
group by k, pt_join.pt
这将输出以下内容:
k v pt
100 1 20150101
100 0 20150102
100 1 20150103
101 0 20150101
101 1 20150102
101 0 20150103
然后,您应该能够使用上面的方法来获得所需的结果:
k ts
100 1,0,1
101 0,1,0