2014-10-14 2 views
0

У меня есть таблица, содержащая поле под названием/type datetime. Позвольте сказать один год. Следующий запрос дает мне все различные числа месяцев в течение этого определенного года:Выберите строки дат и пропущенных дат в mySql

SELECT month(datetime) 
FROM foo 
GROUP BY month(datetime); 

Так позволяет сказать, что запрос возвращает две строки в том числе с января по ноябрь. Можете/как я могу манипулировать этим запросом, чтобы получить также отсутствующий месяц (февраль - октябрь и декабрь)?

+0

Если у foo нет данных за эти месяцы, вы не можете выбрать только из foo и увидеть отсутствующие месяцы. Вы должны расширить свой запрос, чтобы разрешить это. –

+0

У вас здесь нет агрегирующих функций, поэтому я не уверен, почему у вас есть предложение GROUP BY. – Strawberry

+0

Из базы данных вы можете получить то, что есть. Вы не можете получить недостающие месяцы. Лучше, если вы создадите массив из всех месяцев и исключите месяц, исходящий из указанного выше запроса. Это поможет вам в получении недостающих месяцев. – Garima

ответ

0

Вы можете попробовать это ... Не уверен, что это тот, который вы ищете.

SELECT DISTINCT MonthName FROM 
    ( 
    SELECT MONTHNAME(STR_TO_DATE(1, '%M')) AS MONTHNAME 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(2, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(3, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(4, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(5, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(6, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(7, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(8, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(9, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(10, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(11, '%M')) 
    UNION 
    SELECT MONTHNAME(STR_TO_DATE(12, '%M')) 
    ) AS allMonths 
    LEFT JOIN 
    foo ON MONTHNAME(STR_TO_DATE(month(datetime), '%m')) = allMonths.MonthName 
    WHERE foo.datetime is null 
+0

Хороший лорд. Я думаю, что он лучше решил это в своем коде, поскольку это не то, о чем должна беспокоиться база данных. – Alternatex

Смежные вопросы