Souhlasím s Lievenovou odpovědí, vytvořte tabulku obsahující všechny měsíce, které byste kdy mohli potřebovat, a použijte ji k "LEVÉMU PŘIPOJENÍ" k vaší výsledkové tabulce. Pamatujte, že toto je opravdu malá tabulka, pouze 365 (ish) řádků za rok dat, která máte... A můžete snadno napsat nějaký kód, který tuto tabulku naplní zpočátku
Děláme to zde a přináší to spoustu výhod, například si představte měsíční datovou tabulku s následujícími poli (a dalšími, která vás napadnou!) plně vyplněná pro všechny měsíce v daném rozsahu;
- Datum (např. 2009-04-01)
- Den (např. 1)
- Den v týdnu (např. středa)
- Měsíc (např. 4)
- Rok (např. 2009)
- Finanční rok (např. 2009/10)
- Finanční čtvrtletí (např. 1. čtvrtletí 2009)
- Kalendářní čtvrtletí (např. 2. čtvrtletí 2009)
Poté to zkombinujte s výše uvedeným dotazem, a to následovně;
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`
V mém kódu SQL mohou být nějaké chyby, protože jsem nebyl schopen vytvořit testovací tabulky, ale doufejme, že získáte hlavní a upravíte jej tak, aby vyhovoval vašim potřebám!
Pomocí tohoto můžete změnit svou klauzuli „GROUP BY“ na cokoli, co máte v tabulce „dateTable“, což vám umožní snadno vykazovat podle finančního čtvrtletí, měsíce, dne, dne v týdnu atd.
Doufám, že to pomůže!