Как получить первый ненулевой элемент из ARRAY <string>в улье 2.2.0 - PullRequest
0 голосов
/ 27 апреля 2018

У меня SQL куста, как показано ниже, который возвращает следующий вывод, теперь я хочу получить первое непустое значение из массива, т. Е. "11".

SQ ::

выберите cod_cust, split (reverse (concat_ws ('', collect_list) (случай, когда acc_status = 'Dormant' затем "1" else "0" end))), '0') статус от account_status group by cod_cust;

Выход ::

cod_cust status

1023 ["", "11", "1", "111", "", ""]

2209 ["", "11", "1", "111", "", ""]

1 Ответ

0 голосов
/ 27 апреля 2018

Без использования функции 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...