@ cornisto, я предполагаю, что у вас есть по крайней мере одна строка в таблице на каждый день рассматриваемого периода.Чтобы уменьшить количество почасовых строк и получать по одной строке в день, вы можете сначала:
GROUP BY
YEAR(datetime_value), MONTH(datetime_value), DAY(datetime_value)
Чтобы получить месяц года, исходя из того, что июнь является первым месяцем каждого года:
((((MONTH(datetime_value) + 7) - 1) % 12) + 1) AS mth_of_yr
NB. Чтобы скорректировать июнь до 1-го месяца, я добавляю 7 вместо вычитания 5, чтобы предотвратить представление отрицательного значения оператору MOD.Итак, учитывая июнь, который обычно будет 6-м месяцем года, но который мы хотим, чтобы он был 1-м месяцем, мы добавляем 7, что приводит к результату 13. Мы вычитаем 1, тогда MOD 12 приведет к 0, а затем прибавит 1, чтобы получить желаемый конечный результат(месяц) 1. Я привык работать с нумерацией с датами на основе одного, а не нуля.
Чтобы получить квартал года на основе того же месяца на основе июнячисло:
(((mth_of_yr - 1) DIV 3) + 1) AS qtr_of_yr
Чтобы получить текущий год на основе начала года, являющегося 01-июнем каждого года:
(YEAR(datetime_value) - IF(mth_of_yr > 7, 1, 0))
Это обеспечит, что месяцы январь-май следующихгод, рассматриваются как принадлежащие предыдущему году.
Как я уже говорил в комментариях к вашему вопросу, я бы посоветовал вам выполнить всю эту логику отдельно и создать таблицу календаря / даты.С такой таблицей, которая уже есть, ваш фактический запрос (и любые другие, использующие этот июньский календарь) будут значительно упрощены.