mysql 建立時間維度表

2021-09-26 09:27:21 字數 2375 閱讀 8710

做系統設計以及涉及資料分析的時候,會涉及到各種期間維度的統計計算。

可以按日期生成期間維度表,如下:

1.按期間生成日期表

drop table if exists `v_day`;

create table `v_day` (

`oc_date` varchar(20) default null

);

2.呼叫方法為輸入開始結束日期,生成期間的日期

delimiter $$

drop procedure if exists `sp_gen_dates`$$

create procedure `sp_gen_dates` (

param_begin_date varchar (20),

param_end_date varchar (20)

) begin

declare cur_date,

end_date varchar (20) ;

set cur_date = date_format(param_begin_date, '%y-%m-%d') ;

set end_date = date_format(param_end_date, '%y-%m-%d') ;

while

cur_date < end_date do

insert into v_day (oc_date)

values

(cur_date) ;

set cur_date = date_add(cur_date, interval 1 day) ;

end while ;

end $$

delimiter ;

2.生成日期維度表

# time span

set @d0 = "2012-01-01";

set @d1 = "2035-12-31";

set @date = date_sub(@d0, interval 1 day);

# set up the time dimension table

drop table if exists time_dimension;

create table `time_dimension` (

`date` date default null,

`id` int not null,

`y` smallint default null,

`ym` int default null,

`m` smallint default null,

`d` smallint default null,

`yw` smallint default null,

`w` smallint default null,

`q` smallint default null,

`wd` smallint default null,

`m_name` char(10) default null,

`wd_name` char(10) default null,

primary key (`id`)

); # populate the table with dates

insert into time_dimension

select @date := date_add(@date, interval 1 day) as date,

# integer id that allowsimmediate understanding

date_format(@date, "%y%m%d")as id,

year(@date) as y,

date_format(@date, '%y%m') as 'ym',

month(@date) as m,

day(@date) as d,

date_format(@date, "%x")as yw,

week(@date, 3) as w,

quarter(@date) as q,

weekday(@date)+1 as wd,

monthname(@date) as m_name,

dayname(@date) as wd_name

from v_day

where date_add(@date, interval 1 day) <= @d1

order by date;

select * from time_dimension

結果如下:

建立時間維度表的儲存過程

在建立bi資料倉儲時,時常需要用到時間維度,通過儲存過程一次性批量生成,語句如下 create procedure dbo create time by day dimension add the parameters for the stored procedure here asbegin se...

在SQL中建立時間維度表

這是一道資料分析的筆試題 用sql語句生成一張從2020年1月1日至今日的日期表。同時也這是考察在sql中建立時間維度表。這裡採用迴圈的方式 先建立乙個 只有日期字段,字段型別為date create table ab date date date 建立乙個procedure 從2020年1月1日開...

Mysql建立日期維度碼表

建立日期維度表 create table date dimension date id int 8 not null comment 日期id date format varchar 20 default null comment 日期格式化 curr day int 8 default null ...