как получить первый и последний день квартала и отсечку в измерении времени улья

#hive #hiveql

Вопрос:

Я создаю запрос в hive, чтобы создать измерение времени, которое выберет дату с 2010-01-01 по текущую дату и отобразит год, квартал, год_среза(дата -7) и отсечение квартала(дата — 7)

Запрос:

   with dates as (  select date_add("2010-01-01", a.pos) as d from (select posexplode(split(repeat("o", datediff(from_unixtime(unix_timestamp()), "2010-01-01")), "o"))) a)  select d as date_today,year(d) as year,CONCAT('Q',(INT((MONTH(d)-1)/3) 1)) AS QUARTER,YEAR(date_add(d, -7)) AS year_cutoff,  CONCAT('Q',(INT((MONTH(date_add(d, -7))-1)/3) 1)) AS QUARTER_cutoff,trunc(add_months(d,-(month(d)-1)%3),'MM') as Firstday_quarter  from dates     

Результат:

 | date_today | year | quarter | year_cutoff | quarter_cutoff | Firstday_quarter  ---------- | ----- | ------ | ------------ | ---------- | ---------- |2010-01-01 | 2010 | Q1 | 2009 | Q4 | 2010-01-01 |2010-01-02 | 2010 | Q1 | 2009 | Q4 | 2010-01-01 |2010-01-03 | 2010 | Q1 | 2009 | Q4 | 2010-01-01   

Мне нужно рассчитать еще 3 столбца,таких как quarter_last_date,Firstday_quartercutoff, last_date_quarter_cutoff, из которых я вычислил firstday_quarter Не могли бы вы, пожалуйста, сообщить мне, как я могу получить остальные 3 столбца с помощью hive

Экс:

дата сегодня Первый День_квартала Последний День_квартала Первый День_квартального отсечения Последний День_квартального отсечения
2010-01-07 2010-01-01 2010-03-31 2009-10-01 2009-12-31