日曆表作用與HiveSQL生成

2021-10-23 11:35:30 字數 1417 閱讀 6947

在資料處理的過程中,有時候會碰到一些需要使用日曆的場景,在使用中碰到過的有

1.計算工作日(可以抽象一些理解為為不同日期的權重不一樣,工作日權重為1,其他為0)

2.計算財年、財務月、財務周(和自然日期有所不同)

3.利用日期區間展開一些計算(比如將某張賬單金額拆到賬單對應得乙個時間區間)

這裡記錄一段日曆表的生成hivesql,需要執行引擎裡有日期加減函式並支援cte語法

with tmp_num as (

select num from values

(0),(1)

,(2)

,(3)

,(4)

,(5)

,(6)

,(7)

,(8)

,(9)

t(num)

),number as(

select /*+mapjoin(num_10,num_100,num_1000,num_10000)*/

num_0.num+num_10.num*10+num_100.num*100+num_1000.num*1000+num_10000.num*10000 as number

from tmp_num num_0

join tmp_num num_10

join tmp_num num_100

join tmp_num num_1000

join tmp_num num_10000

),calendar as(

select dateadd(to_date('19900101','yyyymmdd'),number,'dd') as day

from number

)select to_char(day,'yyyymmdd') as dt

,to_char(day,'yyyymm') as dt_month

,to_char(day,'yyyy') as dt_year

from calendar

;

對於財年、財務月、財務周的計算,我們可以採用這樣一種方法:

假如公司在4月開啟新的乙個財年(新財年年份與自然年相同)

例:2023年3月31日為2019財年,2023年4月1日為2020財年

則可以通過將日期減去3個月,取減去後日期年份的方式得到其財年

select to_char(day,'yyyymmdd') as dt

,to_char(day,'yyyymm') as dt_month

,to_char(day,'yyyy') as dt_year

,to_char(dateadd(day,-3,'mm'),'yyyy') as fsl_dt_year

from calendar

;

財務月、財務周也可以用類似方法處理

mysql 日曆表 mysql建立日曆表

最近開發遇到乙個需求,需要統計一段時間內每天的各種資料,發現某天沒有的資料沒法顯示出來,所以這時候用一張日曆表去聯合查詢即能獲得每天的資料 建立日曆表用到adddate這個系統函式,這個函式會自動為給定的日期新增指定的時間間隔,adddate 2017 06 20 1 會得出2017 06 21,利...

Qlikview指令碼生成日曆表

多數情況下dw會給報表輸出一張比較全的標準日曆表,如果是這樣的情況,那麼可以直接從dw中讀取,所以我要寫的是dw中沒有提供並且從事實資料中提取並不完整或者太耗資源的情況,其實是可以通過指令碼自動生成乙份標準日曆表,下面就介紹一下思路。定義變數 let vdatemin num makedate 20...

小程式日曆表

頁面 取消確定 年 月 js component 元件的初始資料 data lifetimes detached function 元件的方法列表 methods 確認選擇 sure function e 展示彈框 show function e 滑動更改 bindchange function e...