Сравнение дат в том же столбце на основе условия в SQL / Hive - PullRequest
0 голосов
/ 03 мая 2020

У меня есть таблица со схемой ниже.

Каждый person_id может иметь несколько кодов (A, B, C, D et c), связанных с ними. Для каждого person_id с кодом «A» сравните соответствующую дату с датой всех других кодов, которые может иметь человек, и отфильтруйте даты с точностью до 6 месяцев после даты кода «A»

. первый person_id 30038590555, я хочу убедиться, что дата кода B и C находятся в пределах 6 месяцев с даты A. Поскольку оба значения превышают 6-месячный порог, они должны быть отфильтрованы.

person_id   code    Date
30038590555 B   5/16/2017
30038590555 C   1/9/2019
30038590555 A   1/25/2020
37057397055 A   3/21/2020
38438355555 A   1/25/2020
59385393355 C   7/22/2014
59385393355 A   2/22/2020
44384037555 A   12/21/2019
49384037555 A   3/21/2020
50573409355 D   4/5/2016
50573409355 A   4/6/2016
50573409355 F   4/7/2016
50573409355 G   3/2/2017
50573409355 B   3/7/2017

1 Ответ

0 голосов
/ 03 мая 2020

Это интерпретируется как «в течение 6 месяцев» как «в течение 6 месяцев после». Решение можно адаптировать, если оно действительно означает 6 месяцев до или после.

Если я правильно понимаю, вы хотите сохранить все «А», а затем все остальные, находящиеся в течение шести месяцев после А. Используйте условный максимальный пробег:

select t.*
from (select t.*,
             max(case when code = 'A' then date end) over (partition by person_id order by date) as prev_a_date
      from t
     ) t
where code = 'A' or prev_a_date > add_months(date, -6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...