Maison >base de données >tutoriel mysql >Comment générer des mois dans une plage de dates spécifique dans MySQL, y compris des valeurs vides ?

Comment générer des mois dans une plage de dates spécifique dans MySQL, y compris des valeurs vides ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 22:59:291076parcourir

How to Generate Months within a Specific Date Range in MySQL, Including Empty Values?

Génération de mois dans une plage de dates spécifique, y compris les valeurs vides

Question :

Dans MySQL , comment puis-je générer une liste de tous les mois dans une plage de dates donnée, même si aucune valeur n'existe pour certains mois ?

Réponse :

Pour y parvenir, créez un tableau séparé contenant tous les mois possibles, tel que :

CREATE TABLE dateTable (
  myDate DATE NOT NULL,
  myYear SMALLINT NOT NULL,
  myMonth TINYINT UNSIGNED NOT NULL
);

Remplissez ce tableau avec tous les mois que vous pouvez rencontrer dans vos données.

Ensuite, utilisez un LEFT JOIN pour combiner votre original table, myTable, avec dateTable :

SELECT DT.myYear, DT.myMonth, 
       AVG(myTable.value1) AS avg_value_1, 
       AVG(myTable.value2) AS avg_value_2
FROM dateTable AS DT
LEFT JOIN myTable
  ON DT.myDate = myTable.save_date
WHERE DT.myDate BETWEEN '2009-01-01' AND '2009-07-01'
GROUP BY DT.myYear, DT.myMonth

Cela récupérera les valeurs moyennes pour tous les mois dans la plage spécifiée, y compris les mois sans valeurs dans myTable. LEFT JOIN garantit que les valeurs vides sont incluses en faisant correspondre DT.myDate à toutes les lignes de myTable, qu'elles aient ou non des valeurs correspondantes.

Vous pouvez personnaliser davantage la sortie en ajustant la clause GROUP BY pour regrouper les résultats par périodes souhaitées, telles que les trimestres financiers ou les jours de la semaine. Cette approche constitue un moyen pratique et efficace de générer des rapports complets avec une couverture mensuelle complète.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn