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`);
復制代碼

最終結果如圖所示:

然后再去統計數據的時候關聯該日期表就行了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM