我有一张按pt分隔的桌子。数据:
100 1 20150101 101 1 20150102 100 1 20150103
我想使用wm_concat来获得这样的结果,其中在填充0的分区中不存在k:
100,1,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发布于 2015-02-02 17:17:29
实现这一目标的一种方法是首先使用不同分区的子查询进行交叉连接,然后计算一个新的"v“列,当pt存在于特定k时,该列的值为1,否则值为0。然后,你需要为每一个k,v对分组取最大值。我的意思是:
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,0https://stackoverflow.com/questions/28273652
复制相似问题