Я согласен с ответом Ливена: создайте таблицу, содержащую все месяцы, которые вам когда-либо понадобятся, и используйте ее, чтобы "СЛЕДУЕТ ПРИСОЕДИНИТЬСЯ" к вашей таблице результатов.Помните, это действительно крошечная таблица, только 365 (иш) строк в год данных, которые у вас есть ... И вы можете легко написать некоторый код, чтобы заполнить эту таблицу изначально
Мы делаем это здесь, и это даетмного преимуществ, например, представьте ежемесячную таблицу данных со следующими полями (и любыми другими, которые вы можете придумать!), полностью заполненными для всех месяцев в данном диапазоне;
- Дата (например, 2009 г.)-04-01)
- День (например, 1)
- День недели (например, среда)
- Месяц (например, 4)
- Год (например, 2009 г.))
- Финансовый год (например, 2009/10)
- Финансовый квартал (например, 2009Q1)
- Календарный квартал (например, 2009Q2)
Затем объединениеэто с вашим запросом выше, как показано ниже:
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`
В моем коде SQL могут быть некоторые ошибки, так как я не смог создать тестовые таблицы, но, надеюсь, вы получите принципал и изменитев соответствии с вашими потребностями!
Используя это, вы можете изменить свое предложение "GROUP BY" на то, что у вас есть в "dateTable"таблица, которая позволяет легко составлять отчеты по финансовому кварталу, месяцу, дню, дню недели и т. д.
Надеюсь, это поможет!