0

これは私のmySQLステートメントです:

    SELECT DATE(x.created_at), AVG(TIMEDIFF(y.created_at, x.created_at)/60/60)
    FROM 
        (SELECT *
            FROM events a 
            WHERE a.created_at > '12-10-10 12:12:12'
                AND a.type = 'Started') x INNER JOIN

        (SELECT *
            FROM events a 
            WHERE a.created_at > '12-10-10 12:12:12'
                AND a.type = 'Complete') y ON x.target_id = y.target_id
    GROUP BY DATE(x.created_at)
    ORDER BY DATE(x.created_at)    

理想的には、すべての日付の実行中の中央値を取得しようとしています。これが各日付の場合であるため、列間の時差を選択し、created_atその日付のすべての値の間のTIMEDIFFの中央値を見つけます。以下同様に、対応するがあれば、各日付まで続きcompleteます。

短い目標として、上記のコードブロックは「平均化」(中央値がわからないため)であり、各日付の最後の戻り値であり、その日付に該当するものすべてではありません。

ヒント、ヒント、答えはありますか?

4

1 に答える 1

1

テストに適したデータがあれば、クエリは機能しているようです。この修正されたSQLフィドルを参照してください:http ://sqlfiddle.com/#!2 / 8458d / 3/0

ただし、クエリは次のように簡略化できます。

SELECT DATE(a.created_at),
       AVG(TIMEDIFF(b.created_at, a.created_at)/60/60)
FROM events a
INNER JOIN events b
ON a.target_id = b.target_id
WHERE a.created_at > '2012-10-10 12:12:12'
AND a.type = 'Started'
AND b.created_at > '2012-10-10 12:12:12' -- not needed?
AND b.type = 'Completed'
GROUP BY DATE(a.created_at)
ORDER BY DATE(a.created_at) 
于 2012-12-20T21:24:07.187 に答える