2014-02-09 4 views
0

Я пытаюсь создать запрос, который даст мне открытые билеты & закрыт в указанный период времени, сгруппированный по неделям. У кого-нибудь есть идеи о том, как я мог это сделать?Комбинат 2 запроса количества запросов MYSQL из той же таблицы

Если я изменяю ссылку времени от T1.closed вместо T1.opened, я получаю правильную группировку для одного столбца, но не другого.

ниже - это то, что у меня есть до сих пор.

SELECT 
FROM_DAYS(TO_DAYS(T1.created) -MOD(TO_DAYS(T1.created) -1, 7)) as week, 
COUNT(T1.created) as Opened, COUNT(T2.ticket) as Closed 

FROM issues as T1 
LEFT JOIN issues T2 on T1.ticket = T2.ticket AND T1.closed 
BETWEEN (DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) 
AND (DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND T1.closed IS NOT NULL 

WHERE 
T1.created > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) 
AND 
T1.created < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) 

GROUP BY 
week 
+0

Используйте 'SUM' оператора' CASE'. Это полностью отрицает необходимость объединения. 'COUNT' действительно не то, что вам нужно здесь. Я нашел «COUNT» редко, что вам нужно. – Avarkx

+0

Я рассмотрю, как применить это здесь. Я новичок, но я думал, что SUM будет искать # в поле, которое нужно добавить, и что на это время ссылаются, я не был уверен, что это сработает. – user3288534

ответ

0

Насколько я понимаю t1.opened и t1.closed финики, так что вы можете пойти с:

select `week`, sum(`opened`), sum(`closed`) from 
(
    select week(t1.opened) as `week`, count(*) as `opened`, 0 as `closed` 
    from issues as t1 
    where t1.opened is not null AND ##FILTER BY OPENED## 
    group by week(t1.opened) 
union all 
    select week(t2.closed) as `week`, 0 as `opened`, count(*) as `closed` 
    from issues as t2 
    where t2.closed is not null AND ##FILTER BY CLOSED## 
    group by week(t2.closed) 
) as t3 
group by `week` 

примечание: вы видите, что есть 2 запросы, не присоединиться к ним, потому что могут быть недели без закрытых/открытых выпусков

примечание2: если вы хотите добавить фильтр по дате создания - вам нужно подумать, как он должен работать, например выпуск был создан 1 января, открыт 8 января, закрыт 15 января , что должно быть произведено, что каждый из этих диапазонов: 1-7, 2-8, 9-16?

+0

Цель состоит в том, чтобы иметь возможность фильтровать предпочтительно по дате, на которую ссылаются как созданные, так и закрытые (это только 2 столбца). Вышеописанное и предоставило мне сумму всех билетов, открытых и закрытых в течение недели #. Мне пришлось изменить t1.opened на t1.created, поскольку фактический столбец в таблице называется созданным. – user3288534

+0

@ user3288534 ok, то просто добавьте правильный ГДЕ к каждому подзапросу –

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