Есть ли способ инициализировать счетчик на основе условия в Hive / SQL? - PullRequest
0 голосов
/ 05 марта 2020

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

Таблица tx_data, которую я имею, выглядит следующим образом:

User    tx_Dt
A       1/10/2018
A       1/10/2018
A       1/10/2018
A       1/11/2019
A       1/11/2019
A       1/11/2019
A       1/12/2019
A       1/12/2019
D       1/29/2019
D       2/4/2019
D       2/5/2019
E       12/14/2019
E       12/14/2019
E       12/16/2019
E       12/28/2019

Желаемый вывод:

User    tx_Dt       tx_tag  
A       1/10/2018   1
A       1/10/2018   1
A       1/10/2018   1
A       1/11/2019   2
A       1/11/2019   2
A       1/11/2019   2
A       1/12/2019   2
A       1/12/2019   2
D       1/29/2019   1
D       2/4/2019    1
D       2/5/2019    1
E       12/14/2019  1
E       12/14/2019  1
E       12/16/2019  1
E       12/28/2019  2

Я пробовал несколько вещей, например, случай, когда sum () over (разбиение по порядку), внутренние объединения, но не удалось запустить счетчик, который инициализирует в каждой группе по уровню.

1 Ответ

0 голосов
/ 05 марта 2020

Используйте lag() и совокупные суммы:

select t.*,
       sum(case when prev_tx_dt > date_add(tx_dt, -7) then 0 else 1 end) over (partition by user order by tx_dt) as tx_tag
from (select t.*,
             lag(tx_Dt) over (partition by user order by tx_Dt) as prev_tx_dt
      from t
     ) t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...