Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir des valeurs pour chaque jour d'un mois

C'est en fait étonnamment difficile à faire en SQL. Une façon de le faire est d'avoir une longue instruction select avec UNION ALL pour générer les nombres de 1 à 31. Cela démontre le principe mais je me suis arrêté à 4 pour plus de clarté :

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

Il serait peut-être préférable d'utiliser une table pour stocker ces valeurs et de les joindre à la place.

Résultat :

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