Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/08/2008, 19:24
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Mostrar fechas entre un rango definido

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í...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/08/2008 a las 14:06