多數情況下dw會給報表輸出一張比較全的標準日曆表,如果是這樣的情況,那麼可以直接從dw中讀取,所以我要寫的是dw中沒有提供並且從事實資料中提取並不完整或者太耗資源的情況,其實是可以通過指令碼自動生成乙份標準日曆表,下面就介紹一下思路。
//定義變數
let vdatemin = num(makedate(2015,1,1)); //起始時間2015-01-01
let vdatemax = floor(monthend(today())); //結束時間為今天所在月最後一天
let vdatetoday = num(today()); //今天變數
//定義迴圈
tempcalendar:
load
$(vdatemin) + rowno() - 1 as datenumber,
date($(vdatemin) + rowno() - 1) as tempdate
autogenerate 1
while $(vdatemin)+iterno()-1<= $(vdatemax);
//載入日曆表
calendar:
load
date(tempdate) as 標準日期,
autonumber(year(tempdate)&month(tempdate)&day(tempdate)) as 時間key,
// standard date objects
day(tempdate) as 標準日份,
weekday(tempdate) as 標準星期,
week(tempdate) as 標準週數,
month(tempdate) as 標準月份,
'q' & ceil(month(tempdate)/3) as 標準季度,
year(tempdate) as 標準年份
resident tempcalendar order by tempdate asc;
drop table tempcalendar;
//釋放變數
let vdatemin = null();
let vdatemax = null();
let vdatetoday = null();
**:
MySQL 8 0 11 生成日曆表
mysql的date 資料類支援的時間範圍是 1000 1 1 到9999 12 31,通過計算可以知道最大支援天數為3287181天屬於百萬級別的。mysql select datediff 9999 12 31 1000 01 01 days days 3287181 1 row in set ...
日曆表作用與HiveSQL生成
在資料處理的過程中,有時候會碰到一些需要使用日曆的場景,在使用中碰到過的有 1.計算工作日 可以抽象一些理解為為不同日期的權重不一樣,工作日權重為1,其他為0 2.計算財年 財務月 財務周 和自然日期有所不同 3.利用日期區間展開一些計算 比如將某張賬單金額拆到賬單對應得乙個時間區間 這裡記錄一段日...
mysql生成日曆指令碼(年 年月 格式)
create table num i int 建立乙個表用來儲存0 9的數字 insert into num i values 0 1 2 3 4 5 6 7 8 9 生成0 9的數字,方便以後計算時間 create table if not exists day date date 生成乙個儲存日...