2012-06-13 57 views
0

我試圖在字段上加入查詢結果'min' - 這是事件的小時:分鐘。我有一個不同的選擇查詢,我試着UNION(這可能是不正確的,只是嘗試不同的事情,我發現MySQL文檔非常難以閱讀)。在結果字段上加入兩個select查詢

所以我想

H:M,然後的addCountprojectsNum結果 - 所以每一個小時/分鐘我有統計數據。

我哪裏錯了?

(
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'不得不讓我'分鐘'工作。 – waxical

+1

「每分鐘都有相同的'projectsNum'」:這是正常的檢查內部查詢的GROUP BY子句(以前稱爲「第二個查詢」),只返回一個結果(因此只有一個'projectsNum'一個給出'min'),只檢查這個查詢的結果,我不確定你對'm.min'的意思,請你重新說明一下嗎?還請提供你的預期結果(手工製作的)樣本,因爲我對此也有點困惑。 – RandomSeed