MySQL快速生成时间维度表

MySQL快速生成时间维度表:

MySQL里面生成一张时间维度表,用于ETL工具使用。

原文地址:http://blog.csdn.net/neweastsun/article/details/43866599

SET @d0 = "2015-01-01";
SET @d1 = "2019-12-31";

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

use test;

CREATE TABLE `time_dimension` (
  `date` date DEFAULT NULL,
  `id` int(11) NOT NULL,
  `y` smallint(6) DEFAULT NULL,
  `m` smallint(6) DEFAULT NULL,
  `d` smallint(6) DEFAULT NULL,
  `yw` smallint(6) DEFAULT NULL,
  `w` smallint(6) DEFAULT NULL,
  `q` smallint(6) DEFAULT NULL,
  `wd` smallint(6) DEFAULT NULL,
  `m_name` char(10) DEFAULT NULL,
  `wd_name` char(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 
INSERT INTO time_dimension 
SELECT 
  @date := DATE_ADD(@date, INTERVAL 1 DAY) AS DATE,
  DATE_FORMAT(@date, "%Y%m%d") AS id,
  YEAR(@date) AS Y,
  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
  T 
WHERE DATE_ADD(@date, INTERVAL 1 DAY) <= @d1 
ORDER BY DATE ;

神秘的表T,仅仅需要有多于你需要生成日期的记录数即可。思路是从T表选择多行数据,同时生成对应的日期字段。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

身高2m,体重2kg,这样的数据“看上去很好”?

导读:数据挖掘算法通常用于为其他目的收集的数据,或者在收集时未明确其目的。因此,数据挖掘常常不能“在数据源头控制质量”。相比之下,统计学的实验设计或调查中,其数...

8120
来自专栏生活不止眼前的代码

基于DOCKER的MySQL Group Replication + ProxySQL + keepalived 高可用集群搭建

基于DOCKER的MySQL Group Replication + ProxySQL + keepalived 高可用环境配置

19740
来自专栏只喝牛奶的杀手

DevOps

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动...

17750
来自专栏只喝牛奶的杀手

MySQL分区表

随着业务的发展,当然现在比较流行的微服务无非就是业务垂直拆分+功能水平拆分,应用加节点是比较简单的,但是每个业务的单库单表扛不住了;数据库分库分表相对来说更复杂...

14630
来自专栏只喝牛奶的杀手

重试模式

当应用程序尝试连接到服务或网络资源时,使应用程序能够通过以透明方式重试失败的操作来处理临时故障。 这可以提高应用程序的稳定性。

11530
来自专栏IT码农

写Laravel测试代码(1)

写laravel程序时,除了写生产代码,还需要写测试代码。其中,写数据库测试比较麻烦,因为需要针对每一个test case需要建立好数据集,该次test cas...

8420
来自专栏A周立SpringCloud

手把手使用SonarQube分析、改善项目代码质量

SonarQube是一个开源的代码质量管理系统,可用来快速定位代码中的Bug、漏洞以及不优雅的代码。它支持几乎所有的常见编程语言,例如Java、JavaScri...

27420
来自专栏只喝牛奶的杀手

命令和查询责任分离 (CQRS) 模式

使用独立接口将读取数据的操作与更新数据的操作分离。 这可以最大程度地提高性能、可伸缩性和安全性。 通过提高灵活性,让系统随着时间的推移而改进;防止更新命令在域级...

11350
来自专栏IT码农

写Laravel测试代码(2)

在写Laravel测试代码(一) 中聊了关于如何提高 laravel 数据库测试性能,其实简单一句就是:每一个test case, 只重新 seed 被污染的表...

8720
来自专栏小满

自动化测试框架TestNG

由于我对java比较熟悉,所以就从TestNG框架开始学习自动化接口测试。和Junit相比,TestNG比较适合测试人员使用,因为

19120

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励