A través de un store procedure, ya que como no existen fechas definidas en la tabla, no hay nada que contar. Para resolver esto deberás crear una tabla temporal de fechas donde cargues todas las fechas posibles del período y esa te la cruce con PEDIDOS sobre la base del campo
fecha, devolviendote 0 donde haya un NULL en la tabla PEDIDOS. Esto último se dará usando:
IFNULL(FECHA,0) AS FECHA
El cuerpo del Store procedure no es difícil, pero requiere varios pasos:
Código:
DELIMITER $$
DROP PROCEDURE IF EXISTS PEDIDOSXDIA $$
CREATE PROCEDURE PEDIDOSXDIA(IN desde DATE, IN hasta DATE)
BEGIN
DECLARE fin INT DEFAULT 0;
DECLARE dia INT DEFAULT 0;
DECLARE curr DATE;
SET SQL_BIG_SELECTS=1;
DROP TABLE IF EXISTS diasbase;
CREATE TEMPORARY TABLE diasbase
(fecha DATE NOT NULL);
Ciclo: REPEAT
SET current = ADDDATE(desde, INTERVAL dia DAY);
INSERT INTO diasbase VALUES(curr);
SET dia = dia+1;
IF curr = hasta THEN SET fin=1; END IF;
UNTIL fin = 1 END REPEAT Ciclo;
SELECT COUNT(*) pedidos, T2.fecha
FROM pedidos T1 LEFT JOIN diasbase T2 USING(fecha)
WHERE (fecha BETWEEN desde AND hasta)
OR T2.fecha IS NULL;
END $$
DELIMITER ;
Es posible que la condición del where requiera un ajuste, pero en esencia la cosa va por allí...