我有一个如下所示的hive SQL,它返回以下输出,现在我想从数组中获得第一个非null值,即"11"。
SQ::
选择cod_cust,split(reverse(concat_ws('',collect_list(case whenacc_status='Normal'然后"1"else"0"end)),'0')状态account_status组按cod_cust;
输出::
cod_cust状态
1023[","11","1","111",","]
2209[","11","1","111",","]
如果不使用split
函数,输出将如下所示:
cod_cust status
1023 01101011100
2209 01101011100
因此,任务是找到1
的第一个子序列,该子序列可以用regexp_extract
来求解。也可以使用IF
而不是CASE
:
SELECT cod_cust,
regexp_extract(reverse(concat_ws('', collect_list(if((acc_status='Dormant'), '1', '0'))), '1+', 0) first_element
status
FROM account_status
GROUP BY cod_cust;