получить первый день и последний день квартала и 2 квартала назад для даты - PullRequest
0 голосов
/ 23 мая 2018

как получить первый день и последний день квартала для даты?а также первый день и последний день 2 квартала назад для даты в Hive или sql

, например, 03 февраля 2014 года; первый день и последний день квартала будут 01 января 2014 года, а31 марта 2014 года и в тот же день первый и последний день 2 квартала назад будут 01 июля 2013 года и 31 сентября 2013 года

1 Ответ

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

Вы можете сделать это следующим образом (не слишком причудливо, но прямого пути нет).Чтобы упростить его, я просто объединил обе выходные даты

-- before Hive 1.3
select 
case 
when ceil(month(mydate)/ 3.0) =  1 then concat("Jan 01 ",year(mydate),"|","Mar 31 ",year(mydate))
when ceil(month(mydate)/ 3.0)  =  2 then then concat("Apr 01 ",year(mydate),"|","Jun 30 ",year(mydate))
when ceil(month(mydate)/ 3.0)  =  3 then then concat("Jul 01 ",year(mydate),"|","Sep 30 ",year(mydate))
when ceil(month(mydate)/ 3.0)  =  4 then then concat("Oct 01 ",year(mydate),"|","Dec 31 ",year(mydate))
else
null
end,
ceil(month(mydate)) as quarter

from (
    select 
    from_unixtime(unix_timestamp('Feb 03 2014' , 'MMM dd yyyy')) as mydate
) t;


--Hive 1.3 or higher

select 
case 
when quarter(mydate) =  1 then concat("Jan 01 ",year(mydate),"|","Mar 31 ",year(mydate))
when quarter(mydate)  =  2 then then concat("Apr 01 ",year(mydate),"|","Jun 30 ",year(mydate))
when quarter(mydate)  =  3 then then concat("Jul 01 ",year(mydate),"|","Sep 30 ",year(mydate))
when quarter(mydate)  =  4 then then concat("Oct 01 ",year(mydate),"|","Dec 31 ",year(mydate))
else
null
end,
ceil(month(mydate)) as quarter

from (
    select 
    from_unixtime(unix_timestamp('Feb 03 2014' , 'MMM dd yyyy')) as mydate
) t;

, просто заменив жестко закодированную дату для вашего столбца в выборе во внутреннем запросе

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