Мне нужно отобразить общее количество «заказов» за каждый год и месяц.Но в течение нескольких месяцев нет данных, но я хочу отобразить этот месяц (с общим значением ноль).Я мог бы сделать вспомогательные «месяцы» с 12 записями для каждого года, но есть ли способ получить диапазон месяцев, не вводя новую таблицу?
Что-то вроде:
SELECT [all year-month combinations between january 2000 and march 2011]
FROM DUAL AS years_months
У кого-нибудь есть идеи, как это сделать?Можете ли вы использовать SELECT с какой-то формулой, чтобы «создавать» данные на лету?!
ОБНОВЛЕНИЕ:
Обнаружил сам: генерировать дни издиапазон дат
Принятый ответ на этот вопрос является своего рода искомым.Возможно, не самый простой способ, но он делает то, что я хочу: заполнить выбор данными на основе формулы ....
Чтобы «создать» таблицу на лету со всеми месяцами за последние 10 лет:
SELECT CONCAT(MONTHNAME(datetime), ' ' , YEAR(datetime)) AS YearMonth,
MONTH(datetime) AS Month,
YEAR(datetime) AS Year
FROM (
select (curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) MONTH) as datetime
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
LIMIT 120
) AS t
ORDER BY datetime ASC
Должен признать, это ОЧЕНЬ экзотично, но оно РАБОТАЕТ ...
Я могу использовать этот выбор, чтобы объединить его с моей таблицей заказов и получитьитоги за каждый месяц, даже если в определенном месяце нет данных.
Но использование таблицы «цифры» или «календарь», вероятно, является наилучшим вариантом, поэтому я собираюсь использовать это.