MySQL - Crear tabla calendario para mostrar fechas faltantes con valor 0 mysql

 
Vista:

Crear tabla calendario para mostrar fechas faltantes con valor 0 mysql

Publicado por Vladimir Venegas Luis (1 intervención) el 11/01/2023 17:14:52
disculpen cuando realizo una consulta con mysql 5.7.23.

Ando realizando una tabla para obtener la menor cantidad de tickets creados por días de cada mes, no me devuelve los días que no tiene ningún tickets creados pero me di cuenta que esas fechas faltantes obviamente no existen y eso significa que esos días no se crearon tickets.

Ahora quiero realizar una especie de calendario (que no se como crearlo) y que cuando haga mi consulta aparezcan las fechas faltantes con valor de 0 en los tickets

Consulta que me extrae los 10 dias del mes de diciembre del 2022 con menor tickets creados

1
2
3
4
5
6
7
8
9
10
SELECT
    DATE_FORMAT(t.fecha, '%d - %b - %Y') AS fecha,
    COUNT(t.id) AS total,
    EXTRACT(MONTH FROM t.fecha) AS mes
FROM tickets t
WHERE YEAR(t.fecha) = 2022
AND  month(t.fecha) = 12
AND t.activo = 1
GROUP BY DATE(t.fecha)
ORDER BY total

Y me devuelve esto 10 días de diciembre con menor tickets, pero el día 4, 5 y 9 no hubieron tickets creados y esos no me los muestra,

fecha | total | mes
01 - Dec - 2022| 3 | 12
02 - Dec - 2022| 5 | 12
03 - Dec - 2022| 4 | 12
06 - Dec - 2022| 2 | 12
08 - Dec - 2022| 5 | 12
10 - Dec - 2022| 3 | 12
12 - Dec - 2022| 5 | 12


Algun experto que podria ayudarme a solucionar este problema por favor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Crear tabla calendario para mostrar fechas faltantes con valor 0 mysql

Publicado por Yamil Bracho (2 intervenciones) el 11/01/2023 17:50:34
El problema es que las fechas las estan tomando de la tabla de datos y si no hubo registro en los dias 4,5,9 pue sno te va a salir nada.
Puedes hacer dos cosas (1) UN proceso que te genere data con los valores con defectos para eso sdias qu eno tiene sregistrados
(2) Tener una funcion o tabla tenporal donde tengas las fechas de un mes y entonces tomar la fecha de alli y buscarla en tu tabla de datos.
PostgreSQL tiene una funcion que se llama Generate_series pero se que es para generar secuencias de fechas pero no lo ha usado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear tabla calendario para mostrar fechas faltantes con valor 0 mysql

Publicado por Benjamin (1 intervención) el 22/03/2023 17:38:34
Con esta hice el calendario pero tampoco logro que salgan los que traen 0, no entiendo porque

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT LIM.Desde + INTERVAL 1 * (SEQ.row - 1) day AS Fecha
                FROM (SELECT MIN(fechaI) AS Desde,
                             MAX(fechaI) AS Hasta
                             FROM TablaQueContieneFechas
                      ) LIM
                INNER JOIN (SELECT  @row := @row + 1 as row
                              FROM  (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t1
                              CROSS JOIN (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t2
                              CROSS JOIN (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t3
                              CROSS JOIN (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t4
                              CROSS JOIN (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t5
                              CROSS JOIN (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t6
                              CROSS JOIN (SELECT @row:=0) t7
 
                     ) SEQ
                 WHERE LIM.Desde + INTERVAL 1 * (SEQ.row - 1) day <= LIM.Hasta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar