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

Cómo obtener valores para todos los días en un mes

En realidad, esto es sorprendentemente difícil de hacer en SQL. Una forma de hacerlo es tener una declaración de selección larga con UNION ALL para generar los números del 1 al 31. Esto demuestra el principio, pero me detuve en 4 para mayor claridad:

SELECT MonthDate.Date, COALESCE(SUM(`values`), 0) AS Total
FROM (
    SELECT 1 AS Date UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    --
    SELECT 28 UNION ALL
    SELECT 29 UNION ALL
    SELECT 30 UNION ALL
    SELECT 31) AS MonthDate
LEFT JOIN Table1 AS T1
ON MonthDate.Date = DAY(T1.Date)
AND MONTH(T1.Date) = 1 AND YEAR(T1.Date) = 2010
WHERE MonthDate.Date <= DAY(LAST_DAY('2010-01-01'))
GROUP BY MonthDate.Date

Podría ser mejor usar una tabla para almacenar estos valores y unirlos en su lugar.

Resultado:

1, 34
2, 10
3, 0
4, 7