最近開發遇到一個需求,需要統計一段時間內每天的各種數據,發現某天沒有的數據沒法顯示出來,所以這時候用一張日歷表去聯合查詢即能獲得每天的數據
創建日歷表用到ADDDATE這個系統函數,這個函數會自動為給定的日期添加指定的時間間隔,
ADDDATE('2017-06-20',1) 會得出2017-06-21,利用這個功能,給指定的日期循環添加比如10000,即能得到指定日期后10000天的數據
CREATE TABLE num (i int);-- 創建一個表用來儲存0-9的數字
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的數字,方便以后計算時間
INSERT INTO calendar(datelist) SELECT
-- 利用下面計算出0-100000的數字依次添加指定時間間隔,即得2017-06-21后100000天的日歷表
ADDDATE(
( -- 這里的起始日期,你可以換成當前日期
DATE_FORMAT("2017-06-21", '%Y-%m-%d')
),
numlist.id
) AS `date`
FROM
(
-- 這邊利用笛卡爾積計算出 0 - 100000 依次各個數據
SELECT
n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS n100
CROSS JOIN num AS n1000
CROSS JOIN num AS n10000
) AS numlist;
參考鏈接 http://blog.csdn.net/kenhins/article/details/52788358
順便統計每天日期的寫法
SELECT count(id) AS cid, DATE_FORMAT(create_time, '%Y-%m-%d') AS t FROM table GROUP BY t
