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!