0

クエリ結果をフィールド「min」に結合しようとしています。これは、イベントの時間:分です。1つに2つの異なるselectクエリがあり、UNIONを試しています(これは正しくない可能性があります。異なることを試しているだけで、MySQLのドキュメントを読むのが非常に難しいと思います)。

だから私は欲しい

H:Mそしてandの結果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`)
) 
4

1 に答える 1

1

UNION結果のセットを別の結果のセットに追加するだけです。

2番目のクエリをサブクエリとして使用する必要があります。

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`)

このクエリはおそらくひどく実行されます。構文的に正しくするために、元のクエリからブルートフォースでコピーペーストしましたが、最適化する方法が必要です。

于 2012-06-14T01:21:27.777 に答える