Hive SQL: выберите все строки перед событием

В Hive у меня есть следующие данные

sess,person,type,number
a   mary    I   1
a   mary    I   2
a   mary    V   3
a   mary    V   4
b   mary    I   1
b   mary    V   2
b   mary    C   3
a   john    I   1
a   john    I   2
a   john    V   3
a   john    V   4
b   john    I   1
b   john    V   2
b   john    C   3

Как мне выбрать все для каждого человека и сеанса вплоть до первого типа =V? Вывод должен выглядеть так

sess,person,type,number
    a   mary    I   1
    a   mary    I   2
    a   mary    V   3
    b   mary    I   1
    b   mary    V   2
    a   john    I   1
    a   john    I   2
    a   john    V   3
    b   john    I   1
    b   john    V   2

1 ответ

Решение

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

select t.*
from (select t.*,
             min(case when type = 'V' then number end) over (partition by session, person order by number) as min_aid
      from t
     ) t
where min_aid is null or number <= aid;
Другие вопросы по тегам