2012-06-13 3 views
0

필드의 쿼리 결과에 참여하려고합니다. 'min'은 이벤트의 시간 : 분입니다. 나는 두 개의 서로 다른 select 쿼리를 하나 가지고 있고 UNION을 시도하고있다. (옳지 않을 수도 있고, 다른 것을 시도 할 수도있다. MySQL 문서를 읽기가 매우 어렵다). M 다음 addCountprojectsNum의 결과 - 각각의 시간/분 동안 나는 통계를 가지고 : 결과 필드에서 두 개의 선택 쿼리 합치기

그래서 나는

H를 원한다.

어디로 잘못 가고 있습니까?

(
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

감사합니다. 그러나 데이터와 일치하지 않는 것 같습니다. 매분마다 동일한 프로젝트가 있습니다. 또한, m.'min'은 일하기에 단지'min' 만해야했습니다. – waxical

+1

"매분마다 동일한 'projectsNum'이 있습니다 : 내부 쿼리 (이전의"두 번째 쿼리 ")의 GROUP BY 절을 확인하는 것이 정상입니다. 결과 하나만 반환합니다 (따라서 하나의'projectsNum' 만 하나는'min'으로 주어진다.)이 쿼리의 결과 만 확인하라. 'm.min'에 대해 무슨 뜻인지 모르겠다. 다시 말해 줄 수 있겠 니? 예상 결과의 (샘플) 나는 이것에 관해 약간 혼란 스럽기 때문에. – RandomSeed