sql >> Base de Datos >  >> RDS >> Mysql

devuelve ceros para fechas que no existen MYSQL GROUP BY

Por lo general, logra este tipo de cosas al JOIN-ing con una tabla de valores , es decir, una tabla que contiene todos los valores que le interesan.

Las tablas de valores típicas pueden contener, por ejemplo, todos los valores enteros entre 0 y 1000, o todas las fechas de un período determinado. A menudo, las tablas de valores incluyen más valores de los deseados y obtenemos el resultado exacto deseado agregando filtros en la cláusula WHERE.

En este caso, necesitará una tabla de este tipo que contenga fechas. Suponiendo que esta tabla se llame ValTableDates y que contenga todas las fechas entre enero de 2005 y diciembre de 2010, la consulta se vería así:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

La consulta anterior puede requerir algunos ajustes para obtener un valor Cero en lugar de NULL, pero el punto principal es que la Tabla de valores suele ser la forma más sencilla de proporcionar registros de salida para puntos de datos faltantes.
Una alternativa es utilizar una función/expresión que produce la secuencia [fecha] deseada, dentro de una subconsulta, pero generalmente es menos eficiente y más propensa a errores.