Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/06/2017, 09:28
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Devolver 0 si no existe entrada en esa fecha

Hola mario798:

Para hacer lo que quieres, forzosamente necesitas una tabla que tenga todas las fechas que te interesan y entonces hacer un LEFT o RIGTH JOIN con tu tabla de incidencias... Las Bases de datos sólo trabajan con la información que contiene sus tablas, no pueden "inventar" información...

Observa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM incidencias;
  2. +---------------+------------+
  3. | id_incidencia | fecha      |
  4. +---------------+------------+
  5. |             1 | 2017-06-19 |
  6. |             2 | 2017-06-19 |
  7. |             3 | 2017-06-19 |
  8. |             4 | 2017-06-20 |
  9. |             5 | 2017-06-20 |
  10. |             6 | 2017-06-21 |
  11. |             7 | 2017-06-21 |
  12. |             8 | 2017-06-23 |
  13. |             9 | 2017-06-23 |
  14. |            10 | 2017-06-23 |
  15. |            11 | 2017-06-23 |
  16. |            12 | 2017-06-23 |
  17. |            13 | 2017-06-25 |
  18. |            14 | 2017-06-25 |
  19. |            15 | 2017-06-25 |
  20. +---------------+------------+
  21. 15 rows in set (0.02 sec)
  22.  
  23. mysql> SELECT fecha, COUNT(fecha) total
  24.     -> FROM incidencias
  25.     -> GROUP BY fecha;
  26. +------------+-------+
  27. | fecha      | total |
  28. +------------+-------+
  29. | 2017-06-19 |     3 |
  30. | 2017-06-20 |     2 |
  31. | 2017-06-21 |     2 |
  32. | 2017-06-23 |     5 |
  33. | 2017-06-25 |     3 |
  34. +------------+-------+
  35. 5 rows in set (0.00 sec)

Aquí se observa que para el día 22 y el día 24 NO HAY INCIDENCIAS, pero como te dije, el motor de BD's NO PUEDE INVENTAR INFORMACIÓN, ¿que haces? creas una tabla que contenga todas las fechas que te interesa consultar:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM semana;
  2. +------------+
  3. | fecha      |
  4. +------------+
  5. | 2017-06-19 |
  6. | 2017-06-20 |
  7. | 2017-06-21 |
  8. | 2017-06-22 |
  9. | 2017-06-23 |
  10. | 2017-06-24 |
  11. | 2017-06-25 |
  12. +------------+
  13. 7 rows in set (0.00 sec)
y entonces si, puedes hacer un LEFT JOIN y contar de nuevo...

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   semana.fecha,
  3.     ->   COUNT(incidencias.fecha) total
  4.     -> FROM semana
  5.     -> LEFT JOIN incidencias ON incidencias.fecha = semana.fecha
  6.     -> GROUP BY semana.fecha;
  7. +------------+-------+
  8. | fecha      | total |
  9. +------------+-------+
  10. | 2017-06-19 |     3 |
  11. | 2017-06-20 |     2 |
  12. | 2017-06-21 |     2 |
  13. | 2017-06-22 |     0 |
  14. | 2017-06-23 |     5 |
  15. | 2017-06-24 |     0 |
  16. | 2017-06-25 |     3 |
  17. +------------+-------+
  18. 7 rows in set (0.00 sec)

Puedes hacer un Procedimiento Almacenado (SP) en el que le envíes la fecha inicial y final que te interese y que con un cíclo que vaya insertando las fechas en una tabla temporal...

Haz la prueba y nos comentas.

Saludos
Leo.