Какова лучшая логика, чтобы найти максимальную версию в HiveQL? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть данные в таблице Hive, как показано ниже для номера мобильного телефона и номера версии приложения, и я хотел получить максимальный номер версии приложения, установленный на этом мобильном телефоне:

выберите * из app_ver_test;

1112223333      1.1.1.10
1112223333      1.1.1.8
1112224444      1.1.1.15
1112224444      2.1.1.0
1112225555      5.1.1.8
1112225555      5.1.1.20
1112226666      5.1.1.20

когда вы выбираете simple max(App_ver) с помощью group by mobile number, тогда я получаю неправильные результаты для 1112223333, так как он показывает 1.1.1.8 вместо 1.1.1.10. Пожалуйста, помогите мне здесь. Спасибо Sateesh

select ctn,max(CONCAT_WS('0',(split(app_ver, '\\.'))))  from localytics.app_ver_test group by ctn;
select ctn,max(cast(CONCAT_WS('',(split(app_ver, '\\.'))) as Int)  from localytics.app_ver_test group by ctn;
select ctn,(cast(CONCAT_WS('',(split(app_ver, '\\.'))) as float))  from localytics.app_ver_test order by ctn

1 Ответ

0 голосов
/ 04 июля 2019

Вы можете попробовать это:

select a.app_ver,ctn
FROM temp.test_table a
INNER JOIN (
select app_ver, (cast(max(cast(regexp_replace(ctn, "\\.", "")as int )) as string)) as max_value
from temp.test_table
group by app_ver) b 
ON a.app_ver=b.app_ver
and regexp_replace(a.ctn, "\\.", "")=b.max_value ;

Результат:

+-------------+-----------+--+
|  a.app_ver  |    ctn    |
+-------------+-----------+--+
| 1112223333  | 1.1.1.10  |
| 1112224444  | 1.1.1.15  |
| 1112225555  | 5.1.1.20  |
| 1112226666  | 5.1.1.20  |
+-------------+-----------+--+
...