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

Regrouper par semaine, comment obtenir des semaines vides ?

SQL ne peut pas renvoyer des lignes qui n'existent pas dans certaines tables. Pour obtenir l'effet souhaité, vous aurez besoin d'une table Weeks (WeekNo INT) avec une ligne par semaine possible de l'année (qui, IIRC, correspond à 53 ou 54 semaines possibles, selon la façon dont vous comptez).

Ensuite, JOIGNEZ ce tableau à vos résultats réguliers avec une OUTER JOIN pour obtenir les semaines supplémentaires ajoutées.

SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(date) as number 
    FROM YourTable RIGHT OUTER JOIN Weeks ON WEEK(YourTable.date) = Weeks.WeekNo

[Mise à jour] :Notez l'utilisateur de COUNT(date) plutôt que COUNT(*). SQL n'inclura pas les valeurs NULL dans la colonne de date lors de l'addition du COUNT. Étant donné que les semaines manquantes n'auront aucune date, cela vous donnera correctement 0 événement pour ces semaines.