2014-01-25 4 views
0

Привет, я наконец-то понял, как получить результаты в одиночных рядах, но застрял в получении правильных результатов.Множество предложений where в том же столбце

Ниже мой запрос. Я пытаюсь получить сообщение о количестве ошибок, о которых сообщается, и ошибки, завершенные в течение месяца. Когда я изменяю DateFormat (date_reported к DateFormat (date_completed изменение числа, чередуя от сообщается завершено.

select 
    count(r.rpt) as Reported, 
    count(c.cpt) as Completed, 
    DATE_FORMAT(DATE_REPORTED,'%M %Y') as MONTH 

from 
    (select COUNT(faultid) as cpt 
    from fault_info 
    where status = 'Completed' 
    and date_completed >= LAST_DAY(NOW()) - INTERVAL 6 MONTH + INTERVAL 1 DAY 
    ) c, 
    (select COUNT(faultid) as rpt 
    from fault_info 
    where status != 'Completed' 
    and date_reported >= LAST_DAY(NOW()) - INTERVAL 6 MONTH + INTERVAL 1 DAY 
    ) r, 
    fault_info 

GROUP BY MONTH 

ORDER BY date_reported desc 

Любая помощь будет наиболее ценится !!

Это выход я после. Но в в тот момент, когда я просто получаю одинаковый номер для обоих столбцов. Как указано выше, чтобы изменить номер, я изменяю DateFormat (date_reported -> DateFormat (date_completed), но числа остаются неизменными. Они правильны для одного, но не для другого.

Выбрать DateFormat (date_reported ...

Сообщается, Завершена, МЕСЯЦ

'99', '99', 'января 2014'

'72', '72', 'декабря 2013'

'71', '71 », 'ноября 2013'

'107', '107', 'октября 2013'

'114', '114', 'сентября 2013'

'112', '112', 'Август 2013'

ИЛИ Выберите DateFormat (date_completed ...

Сообщается, Завершена, МЕСЯЦ

'68', '68', 'января 2014'

'65', '65', ' декабрь 2013'

'76', '76', 'ноября 2013'

'113', '113', 'октября 2013'

'124', '124', 'сентябрь 2013'

'140', '140', 'августа 2013'

Таким образом, я могу сделать, процентное сравнение можно увидеть, если мы закрываем более которые мы открываем. Поэтому мне нужен фактический отчет за месяц против фактического закрытия в течение месяца.

+1

В чем проблема? –

+0

Рассмотрите возможность предоставления надлежащих DDL (и/или sqlfiddle) ВМЕСТЕ С УДАЛЕННЫМ РЕЗУЛЬТАТОМ – Strawberry

ответ

2

слегка перестроенный, вы должны быть в состоянии сделать один проход против нескольких

SELECT 
     DATE_FORMAT(DATE_REPORTED,'%M %Y') as MONTH, 
     SUM(status = 'Completed') as Completed, 
     SUM(status != 'Completed') as StillOpen 
    from 
     fault_info 
    group by 
     DATE_FORMAT(DATE_REPORTED,'%M %Y'), 
    order by 
     YEAR(DATE_REPORTED) desc, 
     MONTH(DATE_REPORTED) desc 

сумма логического выражения (например, статус = «Completed»), когда правда будет равен 1, иначе 0. Таким образом, при запросе через строки вы получаете как возможные подсчеты с одной группой по агрегации, так и упорядочиваете их в порядке убывания (год/месяц) для самых последних сверху вниз, проходящих через исторические значения.

+0

+1. , , Очень улучшенная версия. –

+0

Спасибо за вашу помощь, но это не совсем то, что мне нужно. Пожалуйста, см. Мое редактирование, и если вы можете помочь, это будет потрясающе !! – lcalway

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