Получение несуществующего месяца/недели/года при использовании MySql group by с функциями даты месяца/недели/года

Я пытаюсь реализовать запрос, в котором я использую агрегаты для суммирования определенных значений, а затем группирую по функциям даты mysql (месяц | год | неделя). Те предложения group by не возвращают несуществующие месяцы ИЛИ год ИЛИ неделю соответственно по очевидным причинам. Мне было интересно, есть ли способ получить их?


person Community    schedule 14.04.2009    source источник


Ответы (2)


Вам нужно создать фиктивную таблицу:

CREATE TABLE t_dummy (num int PRIMARY KEY);

, заполните его и используйте в OUTER JOIN:

SELECT  @start + INTERVAL num DAY, SUM(mytable.value)
FROM    t_dummy
LEFT JOIN
        mytable
ON      mytable.datetime >= @start + INTERVAL num DAY
        AND mytable.datetime < @start + INTERVAL num + 1 DAY
WHERE   t_dummy.num BETWEEN @start and @start + @days

Вам нужно столько последовательных NUM в фиктивной таблице, сколько дней вы хотите охватить своим отчетом.

К сожалению, MySQL не имеет встроенного в генераторе строк.

person Quassnoi    schedule 14.04.2009

Решение должно быть полностью в MySQL? Если это запрос для веб-приложения, я бы закодировал веб-приложение для поиска недостающих строк и вставки их в выходные данные.

person staticsan    schedule 15.04.2009