zoukankan      html  css  js  c++  java
  • MySQL 如何生成日期表

    在开发过程中,经常会遇到统计问题,通常交易信息都不是连续的,此时,统计出来的数据都是不连续的,所以提前生成一个时期表,当没有交易数据的时候填充0,就可以了,下面是生成日期表的步骤

    1、创建一个num表,用来存储数字0~9

    1 CREATE TABLE num (i int);

    结果如下:

    2、在num表中生成0~9

    1 -- CREATE TABLE num (i int);
    2 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

    结果如下:

    3、生成一个存储日期的表,datalist是字段名

    -- CREATE TABLE num (i int);
    -- INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
    CREATE TABLE  if not exists calendar(datelist date); 

    结果如下:

    4、生成并插入日期数据

    复制代码
     1 -- CREATE TABLE num (i int);
     2 -- INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
     3 -- CREATE TABLE  if not exists calendar(datelist date); 
     4 INSERT INTO calendar(datelist) SELECT
     5     adddate(
     6         (   -- 这里的起始日期,你可以换成当前日期
     7             DATE_FORMAT("2016-1-1", '%Y-%m-%d') 
     8         ),
     9         numlist.id
    10     ) AS `date`
    11 FROM
    12     (
    13         SELECT
    14             n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
    15         FROM
    16             num n1
    17         CROSS JOIN num AS n10
    18         CROSS JOIN num AS n100
    19         CROSS JOIN num AS n1000
    20         CROSS JOIN num AS n10000
    21     ) AS numlist;
    复制代码

    结果所示:

    5、最后再添加主键即可

    复制代码
     1 -- CREATE TABLE num (i int);
     2 -- INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
     3 -- CREATE TABLE  if not exists calendar(datelist date); 
     4 -- INSERT INTO calendar(datelist) SELECT
     5 --     adddate(
     6 --         (   -- 这里的起始日期,你可以换成当前日期
     7 --             DATE_FORMAT("2016-1-1", '%Y-%m-%d') 
     8 --         ),
     9 --         numlist.id
    10 --     ) AS `date`
    11 -- FROM
    12 --     (
    13 --         SELECT
    14 --             n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
    15 --         FROM
    16 --             num n1
    17 --         CROSS JOIN num AS n10
    18 --         CROSS JOIN num AS n100
    19 --         CROSS JOIN num AS n1000
    20 --         CROSS JOIN num AS n10000
    21 --     ) AS numlist;
    22 ALTER TABLE `calendar`
    23 ADD COLUMN `id`  int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键' FIRST ,
    24 ADD PRIMARY KEY (`id`);
    复制代码

    最终结果如图所示:

    然后再去统计数据的时候关联该日期表就行了

  • 相关阅读:
    js与设计模式访问者模式
    js与设计模式外观模式
    由一个小Bug推及ie及ff的dom元素差异
    构建一个前端库做一个富客户端的基类
    [原创]LINQ 学习系列教程文章索引
    Sublime Text 2 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux
    Ubuntu分区
    非常不错的WCF入门文章,来自Artech
    助记:MIME类型
    F#学习存疑求解答:关于使用Cotinuation仍然堆栈溢出的问题
  • 原文地址:https://www.cnblogs.com/apolloren/p/12247348.html
Copyright © 2011-2022 走看看