HIVE SQL Сворачивание непрерывных диапазонов в отдельные строки - PullRequest
0 голосов
/ 10 мая 2018

Рассмотрим следующие записи в таблице:

NAME    ID      RATE   LOC   DAY
ABCD    123      -5    NYC    2017-01-01
ABCD    123      -5    NYC    2017-01-02
ABCD    123      -6    SFO    2017-01-03
ABCD    123      -6    DEN    2017-01-04
ABCD    345      -4    ATL    2017-01-05
ABCD    345      -4    WAS    2017-01-06
ABCD    123      -7    CLT    2017-01-07
ABCD    123      -7    CLT    2017-01-08

Я хотел бы иметь вывод, как:

NAME    ID      RATE  LOC   START DAY   END DAY
ABCD    123      -5   NYC   2017-01-01  2017-01-02
ABCD    123      -6   SFO   2017-01-03  2017-01-03
ABCD    123      -6   DEN   2017-01-04  2017-01-04
ABCD    345      -4   ATL   2017-01-05  2017-01-05
ABCD    345      -4   WAS   2017-01-06  2017-01-06
ABCD    123      -7   CLT   2017-01-07  2017-01-08

Как мне сделать это в SQL или HIVE? Я попытался использовать максимум над разделом и row_number Это не похоже на работу. Любые идеи с благодарностью.

Это sql, который я пробовал:

select *     
  from (
        select name
              ,id
              ,min(day) over (partition by name
                                          ,id) as start_date
              ,max(day) over (partition by name
                                          ,id) as end_date                     
              ,row_number () over (partition by name
                                               ,id
                                 order by day asc) as row1
          from table
       ) a
where row1=1;

1 Ответ

0 голосов
/ 10 мая 2018

Этого можно достичь с помощью подхода с разницей номеров строк. Чтобы понять, как это работает, запустите внутренний запрос и посмотрите на результаты.

select name,id,min(day),max(day)
from (select t.*,
      row_number() over(order by day)
      -row_number() over(partition by name,id order by day) as grp
      from tbl t
     ) t
group by name,id,grp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...