2014-10-16 16 views
0

我試圖得到一個結果,包含所有月份內的所有月份與計數多少事件公關。月。如果沒有發現事件,這應該包括零(0)。獲取活動的次數。月,其中包括零,其中事件是一個特定的一個 - 2表

爲此,我創建了一個包含所有日期的表「log_dates」。此表只包含「日期」列。

表「log_events」只包含發生事件的日子事件。表中的一行是一個事件。單個事件不能包含多個事件 - 所以我們需要對事件行進行計數以獲得結果。此表格包含ID,日期和eventtype_id列。

的問題是,當我加入「AND events.eventtype_id =‘3’」下面的查詢,輸出不包含零個事件幾個月他們:

SELECT dates.date 
    , IFNULL(COUNT(*),0) AS sum 
    FROM log_events AS events 
    LEFT 
    JOIN log_dates AS dates 
    ON (DATE(events.date)=dates.date) 
WHERE (dates.date BETWEEN DATE('2010-04-30') AND DATE('2014-09-14')) 
    AND events.eventtype_id='3' 
GROUP 
    BY YEAR(dates.date) 
    , MONTH(dates.date) 
ORDER 
    BY dates.date ASC 

回答

0

下面是一個工作示例。隨意適應它,以滿足您的需求。請注意,範圍查詢可以使用索引,而功能(如DATE())不能,因此儘可能避免,如果可能...

DROP TABLE IF EXISTS log_events; 

CREATE TABLE log_events(event_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,date DATE NOT NULL,eventtype_id INT NOT NULL); 

DROP TABLE IF EXISTS log_dates; 

CREATE TABLE log_dates (date DATE NOT NULL PRIMARY KEY); 

INSERT INTO log_events VALUES 
(1,'2014-01-01',1), 
(2,'2014-01-03',3), 
(3,'2014-01-05',3), 
(4,'2014-01-05',2), 
(5,'2014-01-05',3); 

INSERT INTO log_dates VALUES 
('2014-01-01'), 
('2014-01-02'), 
('2014-01-03'), 
('2014-01-04'), 
('2014-01-05'), 
('2014-01-06'), 
('2014-01-07'); 

SELECT d.* 
     , COALESCE(COUNT(e.event_id),0) 
    FROM log_dates d 
    LEFT 
    JOIN log_events e 
    ON e.date = d.date 
    AND e.eventtype_id = 3 
    WHERE d.date BETWEEN '2014-01-01' AND '2014-12-31' 
    GROUP 
    BY d.date; 

+------------+-------------------------------+ 
| date  | COALESCE(COUNT(e.event_id),0) | 
+------------+-------------------------------+ 
| 2014-01-01 |        0 | 
| 2014-01-02 |        0 | 
| 2014-01-03 |        1 | 
| 2014-01-04 |        0 | 
| 2014-01-05 |        2 | 
| 2014-01-06 |        0 | 
| 2014-01-07 |        0 | 
+------------+-------------------------------+ 
+0

感謝您的回覆。不幸的是,它是相同的結果:-(零行的行不返回 – 2014-10-16 11:06:01

+0

好的,請參閱上面的編輯。 – Strawberry 2014-10-16 11:30:45

+0

輸出應該是pr.月這是一個小提琴:http://sqlfiddle.com/#!2/ 9235d/1/0「May」在哪裏 – 2014-10-16 11:49:22

相關問題