2012-06-13 2 views
0

Я пытаюсь присоединиться к результатам запроса в поле «мин» - это час: мин события. У меня есть два разных запроса на выбор в одном, и я пытаюсь выполнить UNION (что может быть неправильным, просто пытаюсь по-разному, я считаю, что документация по MySQL очень трудна для чтения).Объединение двух запросов выбора в поле результатов

Так что я хочу

H: M, а затем результат addCount и projectsNum - так что для каждого часа/мин у меня есть статистика.

Куда я иду не так?

(
SELECT 
    DATE_FORMAT(`when`, '%H:%i') as `min`, 
    COUNT(`ipAddress`) AS `addCount` 
FROM `metric` m 
WHERE `when` BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR) AND NOW() 
GROUP BY DAY(`when`), HOUR(`when`), MINUTE(`when`) 
) 
UNION 
(
SELECT 
    DATE_FORMAT(v.`created`, '%H:%i') as `min`, 
    COUNT(v.`projID`) as `projectsNum` 
FROM `projects` v 
WHERE v.`created` BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR) AND NOW() 
GROUP BY DAY(v.`created`), HOUR(v.`created`), MINUTE(v.`created`) 
) 
+0

Пожалуйста, отметьте свой код и сделайте его удобным для чтения;) – RandomSeed

ответ

1

UNION просто добавляет набор результатов к другому набору результатов.

Вы должны использовать свой второй запрос в качестве подзапроса:

SELECT 
    DATE_FORMAT(`when`, '%H:%i') as `min`, 
    COUNT(`ipAddress`) AS `addCount`, 
    projects_subquery.`projectsNum` 
FROM `metric` m 
JOIN (

    SELECT 
     DATE_FORMAT(v.`created`, '%H:%i') as `min`, 
     COUNT(v.`projID`) as `projectsNum` 
    FROM `projects` v 
    WHERE v.`created` BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR) AND NOW() 
    GROUP BY DAY(v.`created`), HOUR(v.`created`), MINUTE(v.`created`) 

) AS projects_subquery ON projects_subquery.`min` = m.`min` 
WHERE `when` BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR) AND NOW() 
GROUP BY DAY(`when`), HOUR(`when`), MINUTE(`when`) 

Этот запрос, вероятно, выполняет ужасно. Я просто скопировал копию из вашего исходного запроса, чтобы сделать его синтаксически правильным, но должен быть способ его оптимизации.

+0

Спасибо за это - но, похоже, не соответствуют данным. Каждая минута имеет те же проектыNum. Кроме того, m.'min' должен был просто «мин» работать. – waxical

+1

«Каждая минута имеет те же« projectsNum »: это нормальная проверка предложения GROUP BY из внутреннего запроса (ранее ваш« второй »запрос»). Это возвращает только один результат (поэтому только один «projectNum» для один заданный 'мин') .Проверьте результаты этого запроса.Я не уверен, что вы имеете в виду о' m.min', не могли бы вы перефразировать? Пожалуйста, также укажите (ручной) образец ваших ожидаемых результатов, так как я немного смущен этим. – RandomSeed