как применить максимальное предложение к столбцу, кроме группировки по столбцам в Hive - PullRequest
1 голос
/ 27 сентября 2019

У меня есть таблица улья, которая содержит данные, как показано ниже.

Table
---------------------
c1     c2      c3
a      1       7
a      2       6
a      3       3
a      3       1
a      3       2

Я хочу написать запрос, чтобы получить значение 2 из столбца c3.Логика такова: для столбца c1 выберите max (c2), а затем в пределах этого max (c2) найдите max (c3)

Я написал запрос как

select c1, max(c3) from table1 
group by c1
having c2=max(c2)

, но это не сработало какHive говорит, что я могу использовать только те столбцы в условии, которые являются частью группы.

Пожалуйста, помогите мне с этим.

Примечание: - Мне нужен один запрос для этого.Я могу написать то же самое в двух запросах

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Использование агрегатной функции:

create table val
(alpha varchar(10),id1  int,id2 int);

insert into val values ('a',3,3);
insert into val values ('a',3,1);
insert into val values ('a',3,2);

select alpha,id2 from
(
select alpha,max(id1) as id1,max(id2) as id2
from val group by alpha
)agg
1 голос
/ 27 сентября 2019
with your_data as (
select stack (5,
'a',1,7,
'a',2,6,
'a',3,3,
'a',3,1,
'a',3,2) as (c1,c2,c3)
)

select c1, max(c3) as max_c3
from
(
select c1,c2,c3,
       rank() over(partition by c1 order by c2 desc) rn --max(c2) marked 1
  from your_data
)s where rn=1 --filter records with max(c2)
group by c1

Результат:

c1  max_c3  
a   3   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...