mysql按日期做曲線圖統計,如果當天沒有數據則日期不全、補全日期


侵刪。不足之處請諒解。

工作中遇到的問題:

  不會就百度,多百度幾次總會有自己需要的。比如這個曲線統計,我也是借用了博客里的各位大大,然后按照自己項目需求做的,頁面給前端懟數據去就行,下面是步驟

1,用戶統計曲線圖,如果其中某一天沒有數據,曲線圖的日期鏈接不起來,如圖:

 

 

我的解決方法:靠百度。首先生成某個范圍的日歷表數據,再通過這個日歷表連接查詢需要統計數據表的數據,沒有的話,默認為 0;這樣就可以得出這個范圍內完整的數據了,所以這種方案,更適合這種需求的變化

現在通過如下 sql 語句生成日歷表:

  CREATE TABLE num (i int);-- 創建一個表用來儲存0-9的數字

  INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的數字,方便以后計算時間

  CREATE TABLE  if not exists calendar(datelist date); -- 生成一個存儲日期的表,datalist是字段名

 

 

-- 這里是生成並插入日期數據

  

INSERT INTO calendar(datelist) SELECT
      adddate(
          (   -- 這里的起始日期,你可以換成當前日期
              DATE_FORMAT("1970-1-1", '%Y-%m-%d')
          ),
          numlist.id
      ) AS `date`
  FROM
      (
          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;

執行以下SQL測試:BETWEEN 取范圍值

SELECT COUNT(u.userID) AS num, c.datelist FROM calendar AS c
LEFT JOIN `user` AS u ON c.datelist = DATE_FORMAT(u.createtime,'%Y-%m-%d')
WHERE c.datelist BETWEEN '2020-03-01' AND '2020-03-26'
GROUP BY c.datelist
ORDER BY c.datelist

 

結果如下:

 

 最終效果:

 


免責聲明!

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



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