如何生成填充空白的报告,显示日期和时间段的结果为零?
这是我到目前为止适用于DATE的内容:
MYSQL
SELECT calendar.datefield AS DATE,
IFNULL(COUNT(digital_lead.id),0) AS leads
FROM digital_lead RIGHT JOIN calendar ON (DATE(digital_lead.received) = calendar.datefield)
WHERE (calendar.datefield BETWEEN (SELECT MIN(DATE('2014-09-01')) FROM digital_lead) AND (SELECT MAX(DATE(received)) FROM digital_lead))
GROUP BY DATE
产生下表:
DATE LEADS
'2014-11-08', '0'
'2014-11-09', '0'
'2014-11-10', '0'
'2014-11-11', '0'
'2014-11-12', '524'
'2014-11-13', '934'
'2014-11-14', '524'
因此,即使是那些TIMESTAMP
字段received
未考虑的结果,也会产生每天的结果。
received
字段是TIMESTAMP
字段,格式为' YYYY-MM-DD HH:MM:SS'。
我希望能够生成一个类似的报告,显示DATE和TIME的细分 - 显示DATE和TIME插槽的零结果。
我创建了一个名为clock
的实用程序表,其中包含一天中的所有小时数。
请参阅SQL小提琴以获取scehema详细信息:
我原以为我可以加入clock
表格digital_lead
,就像我对calendar
所做的那样,然而,这会产生一行,有一个时间和日期2014-11-13 00:00:00。
任何人都可以提供解决方案吗?
修改
只是为了澄清我想将时钟表加入上面给出的MYSQL语句并创建以下输出:
DATE HOURS LEADS
2014-11-06 00:00:00 0'
01:00:00 0'
02:00:00 0'
03:00:00 4
2014-11-07 00:00:00 0'
01:00:00 2
02:00:00 1
使用以下程序生成日历表的日期:
DELIMITER |
CREATE PROCEDURE fill_calendar(start_date DATE, end_date DATE)
BEGIN
DECLARE crt_date DATE;
SET crt_date=start_date;
WHILE crt_date < end_date DO
INSERT INTO calendar VALUES(crt_date);
SET crt_date = ADDDATE(crt_date, INTERVAL 1 DAY);
END WHILE;
END |
DELIMITER ;
以下称为CALL fill_calendar('2008-01-01', '2011-12-31');