用hive寫一個獲取本日期的季度初的sql


由於項目需要獲取(本季度的的發生額總和)/(本季度經歷的天數)的數據(還有月均,年均的數據)。

判斷季度的時候是一個難點,開始的時候寫了一堆case when 來判斷月份,后來寫着寫着發現,這樣也太笨了。於是就開始想辦法。

突然靈機一動,一個季度都是以3個月份為一個體的。何不先算出本日是第幾季度,然后再乘以3就是季度初啊。

因為3月份除以3就等於1了.必須除一個比3大的數,而且月份的數字只會到12.不用擔心除以3.1會出什么亂子。

下面是計算第幾季度的sql

select floor(substr('2017-02-04',6,2)/3.1)+1

出來了第幾季度之后就簡單了。直接*3唄  就是季度的初始日期了。

select (floor(substr('2017-02-04',6,2)/3.1)*3)+1

 

具體源代碼:

select bill_no,

sum(case when part_dt >= concat(substr('${START_DATE}',1,7),'-01') and part_dt<='${START_DATE}' then nvl(amt,0) else 0 end)/((DATEDIFF('${START_DATE}',CONCAT(SUBSTR('${START_DATE}',1,7),'-01'))+1)) month_da,

sum(case when part_dt >= concat(substr('${START_DATE}',1,4),'-',substr(concat('00',floor(substr('${START_DATE}',6,2)/3.1)*3+1),-2),'-01') and part_dt<='${START_DATE}' then nvl(amt,0) else 0 end)/((DATEDIFF('${START_DATE}',CONCAT(SUBSTR('${START_DATE}',1,4),'-',SUBSTR(CONCAT('00',FLOOR(SUBSTR('${START_DATE}',6,2)/3.1)*3+1),-2),'-01'))+1)) quarter_da,

sum(case when part_dt >= concat(substr('${START_DATE}',1,4),'-01-01') and part_dt<='${START_DATE}' then nvl(amt,0) else 0 end)/((DATEDIFF('${START_DATE}',CONCAT(SUBSTR('${START_DATE}',1,4),'-01-01'))+1)) year_da

from xxxx_table_xxxx dlt

group by bill_no

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM