mysql創建日歷表


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

創建日歷表用到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

  


免責聲明!

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



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