做系統設計以及涉及資料分析的時候,會涉及到各種期間維度的統計計算。
可以按日期生成期間維度表,如下:
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 ...