HiveQL выбирает дни рождения в определенном диапазоне дат - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть следующая таблица persons

id name   location dob
1  John   NY       1978-08-02
2  Nancy  LA       1993-10-12
3  Smith  GA       1986-09-25
4  Emily  MN       1988-04-14
5  Lily   MN       1978-11-02

Как написать HiveQL для выбора Дней рождения между текущей датой и 2 месяцами ранее:

Например,

select current_date
>> 2018-09-27

select add_months(current_date,-2);
>> 2018-07-27

выберите birthdays между этими датами

id name   location dob
1  John   NY       1978-08-02
3  Smith  GA       1986-09-25

1 Ответ

0 голосов
/ 27 сентября 2018

Проблемы с днем ​​рождения сложны:

select t.*
from t
where (year(current_date) = year(add_months(current_date, -2)) and
       date_format(dob, 'MM-DD') between date_format(add_months(current_date, -2), 'MM-DD') and date_format(current_date, 'MM-DD')
      ) or
      (year(current_date) > year(add_months(current_date, -2)) and
       date_format(dob, 'MM-DD') not between date_format(current_date, 'MM-DD') and date_format(add_months(current_date, -2), 'MM-DD')
      ) 

По сути, вам нужно сравнивать только месяц и день, а не год.Затем необходимо учитывать, когда период выходит за границы года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...