Ver Mensaje Individual
  #9 (permalink)  
Antiguo 24/03/2016, 18:52
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: Consulta SQL no

Bueno, después de meditarlo un poco, al final me di cuenta que lo mejor era usar CASE, que es una función de control de flujo que detesto usar en MySQL.
CASE tiene algunas veces un comportamiento que no me convence en este DBMS, aunque es una buena solución en otros.

Ahora bien, suponiendo que quieras que te devuelva los datos en un período a indicar, se puede hacer que el SP reciba dos parámetros (fecha de inicio y fecha de fin). También podemos hacer que si la segunda se la pasas en NULL, te tome la primera como inicio y el final hasta el día en curso.

La idea sería mas o menos así:

Código MySQL:
Ver original
  1. delimiter $$
  2. DROP PROCEDURE IF EXISTS  `consultar_fcloc001`$$
  3.  
  4. CREATE PROCEDURE `consultar_fcloc001` (IN fechaIni DATE, IN fechaFin DATE)
  5.  
  6. DECLARE vFechaIni DATE;
  7. DECLARE vFechaFin date;
  8. SET vFechaIni = DATE('2016-01-01');
  9. SET vFechaFin = DATE('2017-01-01');
  10. WHILE vFechaIni < vFechaFin DO
  11. INSERT INTO fechas VALUES(vFechaIni);
  12. SET vFechaIni = ADDDATE(vFechaIni, INTERVAL 1 DAY);
  13. END WHILE;
  14. IF fechaFin is null then
  15.     set fechaFin = CURDATE();
  16.     end if;
  17.     bimestre LCODAR, SUM(LCANTI) CantPedidos
  18.     (SELECT
  19.         (CASE
  20.                 WHEN MONTH(fecha) IN (1 , 2) THEN 1
  21.                 WHEN MONTH(fecha) IN (3 , 4) THEN 2
  22.                 WHEN MONTH(fecha) IN (5 , 6) THEN 2
  23.                 WHEN MONTH(fecha) IN (7 , 8) THEN 2
  24.                 WHEN MONTH(fecha) IN (9 , 10) THEN 2
  25.                 WHEN MONTH(fecha) IN (11 , 12) THEN 2
  26.             END) bimestre,
  27.             LCANTI
  28.     FROM
  29.         fechas F
  30.     LEFT JOIN `fcloc001` P ON F.fecha = DATE(P.LFECPED)
  31.     WHERE
  32.         (LCODAR = 'Q2612A-R' AND LPED > 0
  33.             AND f.fecha BETWEEN fechaIni AND fechaFin)
  34.             OR F.fecha IS NULL)
  35. GROUP BY bimestre DESC
  36. LIMIT 30;
  37.  
  38. END$$

Espero que al menos te sirva de inspiración...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)