說明日期維主要為與日期相關的維度, 主要包括, 周/月/季度/年等聚合維度的關聯計算.
建立維表drop table if exists dim_date;
create table dim_date
(date_key bigint comment 'primary key',
date_id date comment 'yyyy-mm-dd',
date_short varchar(25) comment 'yyyymmdd',
date_long varchar(25) comment 'yyyy年mm月dd日',
week_short_start_friday varchar(25) comment 'ww',
week_of_year_short_start_friday varchar(25) comment 'yyyyww',
week_of_year_long_start_friday varchar(25) comment '2023年第00周',
week_short varchar(25) comment 'ww',
week_of_year_short varchar(25) comment 'yyyyww',
week_of_year_long varchar(25) comment '2023年第00周',
month_short varchar(25) comment 'mm',
month_of_year varchar(25) comment 'yyyy-mm',
month_of_year_short varchar(25) comment 'yyyymm',
month_of_year_long varchar(25) comment 'yyyy年第mm月',
quarter_short tinyint comment '1,2,3,4',
quarter_long varchar(25) comment 'q1,q2,q3,q4',
quarter_of_year_short varchar(25) comment 'yyyyq',
quarter_of_year_long varchar(25) comment 'yyyy年第q季度',
year_short varchar(25) comment 'yyyy',
year_long varchar(25) comment 'yyyy年',
is_holiday tinyint comment '1,0',
description varchar(255) comment '備註',
primary key (`date_key`)
)engine=myisam default charset=utf8;
建立儲存過程create procedure f_dim_date(in start_date varchar(20), in date_count int)
begin
declare i int;
set i=0;
set start_date = str_to_date('2018-09-09','%y-%m-%d %h:%i:%s');
delete from dim_date;
while i < date_count do
insert into dim_date
(date_key,
date_id,
date_short,
date_long,
week_short_start_friday,
week_of_year_short_start_friday,
week_of_year_long_start_friday,
week_short,
week_of_year_short,
week_of_year_long,
month_short,
month_of_year,
month_of_year_short,
month_of_year_long,
quarter_short,
quarter_long,
quarter_of_year_short,
quarter_of_year_long,
year_short,
year_long,
is_holiday,
description)
select
i date_key,
start_date date_id,
date_format(start_date,'%y%m%d') date_short,
date_format(start_date,'%y年%m月%d日') date_long,
date_format(date_add(start_date,interval 4 day),'%u') week_short_start_friday,
date_format(start_date,'%y%u') week_of_year_short_start_friday,
date_format(start_date,'%y年第%u周') week_of_year_long_start_friday,
date_format(start_date,'%u') week_short,
date_format(start_date,'%y%u') week_of_year_short,
date_format(start_date,'%y年第%u周') week_of_year_long,
date_format(start_date,'%m') month_short,
date_format(start_date,'%y-%m') month_of_year,
date_format(start_date,'%y%m') month_of_year_short,
date_format(start_date,'%y年第%m月') month_of_year_long,
quarter(start_date) quarter_short,
concat('q',quarter(start_date)) quarter_long,
concat(date_format(start_date,'%y'),quarter(start_date)) quarter_of_year_short,
concat(date_format(start_date,'%y'),'年第',quarter(start_date),'季度') quarter_of_year_long,
date_format(start_date,'%y') year_short,
date_format(start_date,'%y年') year_long,
case when dayofweek(start_date)=1 or dayofweek(start_date)=7 then 1 else 0 end is_holiday,
'' description
from dual;
set i=i+1;
set start_date = date_add(start_date,interval 1 day);
end while;
end;
執行 call f_dim_date('2015-01-01',365) 生成維表
新增維表屬性
新增列:
alter table dim_date add column first_date_of_week varchar(25);
alter table dim_date add column last_date_of_week varchar(25);
更新列值
update dim_date,
select
week_of_year_short_start_friday,
min(date_id) first_date_of_week,
max(date_id) last_date_of_week
from
dim_date
group by
week_of_year_short_start_friday
) vset dim_date.first_date_of_week = v.first_date_of_week,
dim_date.last_date_of_week = v.last_date_of_week
where
dim_date.week_of_year_short_start_friday = v.week_of_year_short_start_friday
mysql創表 mysql建立表
1 說明 此檔案包含了blog資料庫中建立所有的表的mysql語句.2 3 在sql語句中注意 約束的概念 4 1.實體完整性約束 主鍵 唯一且非空 primary key 5 違約處理 no action 拒絕執行 6 7 2.參照完整性約束 外來鍵約束 foregin key reference...
mysql 無法建立表 MYSQL 不能建立表
can t create table ticket user role.frm errno 121 語法是對的,但顯示上面的錯誤 原因有三種 1 表名重複 2 以該名字命名的表之前建立過後來刪除了,但是對應的.frm檔案還留在磁碟上 3 主鍵名字在全資料庫範圍內不是唯一的 我出現的時候是第三個 ke...
mysql表如何建立 如何建立mysql表?
mysql中建立資料表的語法為 create table table name column name column type 在mysql 提示符下,建立乙個mysql表這是很容易的。使用 sql 命令 create table 來建立表。在建立表前需要使用use databasename命令選擇...