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

Devolver 0 si no existe entrada en esa fecha

Estas en el tema de Devolver 0 si no existe entrada en esa fecha en el foro de Mysql en Foros del Web. Buenas, Tengo una duda a la hora de hacer la siguiente sentencia: Tengo una tabla incidencias en la que tengo id, inicio_incidencia (datetime), titulo_incidencia. Me ...
  #1 (permalink)  
Antiguo 21/06/2017, 04:15
Usuario no validado
 
Fecha de Ingreso: abril-2009
Ubicación: España
Mensajes: 96
Antigüedad: 15 años
Puntos: 0
Devolver 0 si no existe entrada en esa fecha

Buenas,

Tengo una duda a la hora de hacer la siguiente sentencia:

Tengo una tabla incidencias en la que tengo id, inicio_incidencia (datetime), titulo_incidencia.

Me gustaría sacar el número de incidencias agrupadas por fecha de la semana y sino existe devuelve 0.

ejemplo:

FECHA Nº Incidencias
19-06-2017 4
20-06-2017 9
21-06-2017 3
22-06-2017 2
23-06-2017 0
24-06-2017 0
25-06-2017 2
  #2 (permalink)  
Antiguo 22/06/2017, 09:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.

Etiquetas: devolver, entrada, fecha, tabla
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 04:53.