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+---------------+------------+
| id_incidencia | fecha |
+---------------+------------+
| 1 | 2017-06-19 |
| 2 | 2017-06-19 |
| 3 | 2017-06-19 |
| 4 | 2017-06-20 |
| 5 | 2017-06-20 |
| 6 | 2017-06-21 |
| 7 | 2017-06-21 |
| 8 | 2017-06-23 |
| 9 | 2017-06-23 |
| 10 | 2017-06-23 |
| 11 | 2017-06-23 |
| 12 | 2017-06-23 |
| 13 | 2017-06-25 |
| 14 | 2017-06-25 |
| 15 | 2017-06-25 |
+---------------+------------+
15 rows
in set (0.02 sec
)
+------------+-------+
| fecha | total |
+------------+-------+
| 2017-06-19 | 3 |
| 2017-06-20 | 2 |
| 2017-06-21 | 2 |
| 2017-06-23 | 5 |
| 2017-06-25 | 3 |
+------------+-------+
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+------------+
| fecha |
+------------+
| 2017-06-19 |
| 2017-06-20 |
| 2017-06-21 |
| 2017-06-22 |
| 2017-06-23 |
| 2017-06-24 |
| 2017-06-25 |
+------------+
y entonces si, puedes hacer un LEFT JOIN y contar de nuevo...
Código MySQL:
Ver original -> semana.fecha,
-> COUNT(incidencias.fecha
) total
-> LEFT JOIN incidencias
ON incidencias.fecha
= semana.fecha
+------------+-------+
| fecha | total |
+------------+-------+
| 2017-06-19 | 3 |
| 2017-06-20 | 2 |
| 2017-06-21 | 2 |
| 2017-06-22 | 0 |
| 2017-06-23 | 5 |
| 2017-06-24 | 0 |
| 2017-06-25 | 3 |
+------------+-------+
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.