Ik ben het eens met het antwoord van Lieven, maak een tabel met alle maanden die je ooit nodig zou kunnen hebben, en gebruik die om "LEFT JOIN" naar je resultatentabel te gaan. Onthoud dat dit een heel kleine tabel is, slechts 365 (ish) rijen per jaar aan gegevens die je hebt... En je kunt gemakkelijk wat code schrijven om deze tabel in eerste instantie te vullen
We doen dit hier, en het biedt veel voordelen, stel je bijvoorbeeld een maandelijkse gegevenstabel voor met de volgende velden (en alle andere die je maar kunt bedenken!) volledig gevuld voor alle maanden in een bepaald bereik;
- Datum (bijv. 01-04-2009)
- Dag (bijv. 1)
- Dag van de week (bijv. woensdag)
- Maand (bijv. 4)
- Jaar (bijv. 2009)
- Boekjaar (bijv. 2009/10)
- Financiële kwartaal (bijv. 2009Q1)
- Kalenderkwartaal (bijv. 2009Q2)
Combineer dit dan als volgt met uw vraag hierboven;
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 `dateTable`.`myDate` = `myTable`.`save_date` WHERE `dateTable`.`myDate` BETWEEN '2009-01-01' AND '2009-07-01' GROUP BY `DT`.`myYear`, `DT`.`myMonth`
Er kunnen enkele fouten in mijn SQL-code zitten omdat ik de testtabellen niet heb kunnen maken, maar hopelijk krijgt u de hoofdsom en wijzigt u deze om aan uw behoeften te voldoen!
Hiermee kunt u uw "GROUP BY"-clausule wijzigen in wat u ook in de "dateTable"-tabel heeft, waardoor u gemakkelijk kunt rapporteren per financieel kwartaal, maand, dag, dag van de week, enz.
Ik hoop dat dat helpt!