MYSQL - 使用填充空白生成报告

时间:2014-11-27 15:52:27

标签: mysql date datetime

如何生成填充空白的报告,显示日期和时间段的结果为零?

这是我到目前为止适用于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详细信息:

SQL FIDDLE

我原以为我可以加入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');

0 个答案:

没有答案