mysql中创建维表_Mysql创建日期维表

这篇博客介绍了如何在MySQL中创建一个日期维表,包括各种日期相关的聚合维度,并提供了一个存储过程来生成指定数量的日期记录。此外,还添加了维表属性如first_date_of_week和last_date_of_week,并更新了这些属性的值。
摘要由CSDN通过智能技术生成

2ff34e647e2e3cdfd8dca593e17d9b0a.png

说明

日期维主要为与日期相关的维度, 主要包括, 周/月/季度/年等聚合维度的关联计算.

创建维表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 '2016年第00周',

week_short varchar(25) COMMENT 'ww',

week_of_year_short varchar(25) COMMENT 'yyyyww',

week_of_year_long varchar(25) COMMENT '2016年第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

) v

SET 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值