Impala / SQL Как я могу поместить все остальные поля в оператор по группам? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть запрос, сгруппированный по 3 полям против таблицы из 100 полей.Как я могу поместить остальные 97 полей в выборку без объединения?

Это мое утверждение:

select a,b,c,max(d) as max_d
from mytable
group by a,b,c;

Я знаю, что следующий запрос работает, но он очень тяжелый: (

select mytable.* from
(
    select a,b,c,max(d) as max_d
from mytable
group by a,b,c
) uni
join mytable myt (uni.a=mytable.a AND uni.b=mytable.b AND uni.c=mytable.c AND uni.max_d=mytable.d);

Спасибо !!

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

вы можете использовать связанный подзапрос

select t.* from mytable t
where t.d in ( select max(d) from mytable t1 
         where t1.a=t.a and t1.b=t.b and t1.c=t.c
              )
0 голосов
/ 09 октября 2018

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

select t.*
from (select t.*, max(d) over (partition by a, b, c) as max_d
      from mytable t
where d = max_d;
0 голосов
/ 09 октября 2018

Вместо этого вы можете использовать коррелированный подзапрос:

select mt.*
from mytable mt
where mt.d = (select max(mt1.d)
              from mytable mt1
              where mt1.a = mt.a and mt1.b = mt.b and mt1.c = mt.c
             );
...