2017-08-10 15 views
0

MySQL查詢沒有值,以獲得結果ADDED_DATE記錄:如何返回零導致列,如果在ADDED_DATE沒有發現MySQL查詢

SELECT added_date, count(added_date) AS result 
FROM reports 
WHERE added_date BETWEEN '2017-08-01' AND '2017-08-10' 
GROUP BY added_date 

查詢結果:

added_date result 
2017-08-01 20 
2017-08-02 10 
2017-08-04 22 
2017-08-08 1 

我想結果爲:

added_date result 
    2017-08-01 20 
    2017-08-02 10 
    2017-08-03 0 
    2017-08-04 22 
    2017-08-05 0 
    2017-08-06 0 
    2017-08-07 0 
    2017-08-08 1 
+0

的可能的複製[mysql如何填寫範圍缺少的日期?(https://stackoverflow.com/questions/ 3538858/MySQL的 - 如何對填充失蹤日期,在範圍內) – Riedsio

回答

0

如下面的代碼所示。您可以創建日曆表。其中提供我們所需的確切日曆。進入該日曆表。

DROP TABLE IF EXISTS time_dimension; 

CREATE TABLE time_dimension (
     id      INTEGER PRIMARY KEY, -- year*10000+month*100+day 
     db_date     DATE NOT NULL, 
     year     INTEGER NOT NULL, 
     month     INTEGER NOT NULL, -- 1 to 12 
     day      INTEGER NOT NULL, -- 1 to 31 
     quarter     INTEGER NOT NULL, -- 1 to 4 
     week     INTEGER NOT NULL, -- 1 to 52/53 
     day_name    VARCHAR(9) NOT NULL, -- 'Monday', 'Tuesday'... 
     month_name    VARCHAR(9) NOT NULL, -- 'January', 'February'... 
     holiday_flag   CHAR(1) DEFAULT 'f' CHECK (holiday_flag in ('t', 'f')), 
     weekend_flag   CHAR(1) DEFAULT 'f' CHECK (weekday_flag in ('t', 'f')), 
     event     VARCHAR(50), 
     UNIQUE td_ymd_idx (year,month,day), 
     UNIQUE td_dbdate_idx (db_date) 

) Engine=MyISAM; 

DROP PROCEDURE IF EXISTS fill_date_dimension; 
DELIMITER // 
CREATE PROCEDURE fill_date_dimension(IN startdate DATE,IN stopdate DATE) 
BEGIN 
    DECLARE currentdate DATE; 
    SET currentdate = startdate; 
    WHILE currentdate < stopdate DO 
     INSERT INTO time_dimension VALUES (
         YEAR(currentdate)*10000+MONTH(currentdate)*100 + DAY(currentdate), 
         currentdate, 
         YEAR(currentdate), 
         MONTH(currentdate), 
         DAY(currentdate), 
         QUARTER(currentdate), 
         WEEKOFYEAR(currentdate), 
         DATE_FORMAT(currentdate,'%W'), 
         DATE_FORMAT(currentdate,'%M'), 
         'f', 
         CASE DAYOFWEEK(currentdate) WHEN 1 THEN 't' WHEN 7 then 't' ELSE 'f' END, 
         NULL); 
     SET currentdate = ADDDATE(currentdate,INTERVAL 1 DAY); 
    END WHILE; 
END 
// 
DELIMITER ; 

TRUNCATE TABLE time_dimension; 

CALL fill_date_dimension('2000-01-01','2018-01-01'); 

一旦創建了該日曆表,您可以在下面寫下查詢,它將解決您的問題。

SELECT added_date,count(added_date) as result 
FROM time_dimension TD 
LEFT JOIN reports RP ON DATE(RP.added_date)=TD.DB_DATE 
WHERE added_date BETWEEN '2017-08-01' AND '2017-08-10' group by 
GROUP BY DATE(DB_DATE); 
相關問題