最近開發遇到一個需求,需要統計一段時間內每天的各種數據,發現某天沒有的數據沒法顯示出來,所以這時候用一張日歷表去聯合查詢即能獲得每天的數據
創建日歷表用到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