Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Mostrar fechas entre un rango definido

Estas en el tema de Mostrar fechas entre un rango definido en el foro de Mysql en Foros del Web. Buenas tardes, Existe una consulta simple que no he podido resolver para lo cual acudo a los expertos de este foro. Tengo una tabla pedidos, ...
  #1 (permalink)  
Antiguo 17/08/2008, 12:26
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Mostrar fechas entre un rango definido

Buenas tardes,

Existe una consulta simple que no he podido resolver para lo cual acudo a los expertos de este foro.

Tengo una tabla pedidos, en los que uno de los campos es la fecha.

La consulta consiste en saber para cada dia, entre dos fechas definidas, el total de pedidos. Por ejemplo, necesito saber entre diciembre 1 y 31, el total de pedidos para cada dia. El problema se presenta cuando hay fechas en las que no se hicieron pedidos para las cuales necesito que la consulta me retorne 0.

La consulta que tengo es la siguiente

Código:
select count(*),fecha

from pedidos

where fecha between '2008-12-1' and '2008-12-31'

group by fecha
En esta consulta, obtengo el numero de pedidos para cada fecha, pero si no hay pedido en una fecha, no aparece.

Alguna forma de hacer la consulta ????


Mil gracias
__________________
Desdichado quien duerme en la mañana
  #2 (permalink)  
Antiguo 17/08/2008, 19:24
Avatar de 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, 4 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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:07.