17

start と end の 2 つの日時列を持つ Sessions というテーブルがあります。

各日 (YYYY-MM-DD) には、さまざまな開始時刻と終了時刻 (HH:ii:ss) が存在する可能性があります。これらの開始時間と終了時間の間のすべての差の毎日の平均を見つける必要があります。

いくつかの行の例は次のとおりです。

start: 2010-04-10 12:30:00 end: 2010-04-10 12:30:50
start: 2010-04-10 13:20:00 end: 2010-04-10 13:21:00
start: 2010-04-10 14:10:00 end: 2010-04-10 14:15:00
start: 2010-04-10 15:45:00 end: 2010-04-10 15:45:05
start: 2010-05-10 09:12:00 end: 2010-05-10 09:13:12
...

2010 年 4 月 10 日の時差 (秒単位) は次のようになります。

50
60
300
5

2010 年 4 月 10 日の平均は 103.75 秒です。クエリで次のようなものが返されるようにします。

day: 2010-04-10 ave: 103.75
day: 2010-05-10 ave: 72
...

開始日ごとにグループ化された時差を取得できますが、平均を取得する方法がわかりません。AVG 関数を使用してみましたが、(別の集計関数の結果ではなく) 列の値に対してのみ直接機能すると思います。

これは私が持っているものです:

SELECT
    TIME_TO_SEC(TIMEDIFF(end,start)) AS timediff
FROM
    Sessions
GROUP BY
    DATE(start)

各開始日グループの timediff の平均を取得する方法はありますか? 私は集計関数が初めてなので、何か誤解しているかもしれません。別の解決策を知っている場合は、共有してください。

私はいつでもアドホックにそれを行い、PHPで平均を手動で計算することができましたが、MySQLでそれを行う方法があるかどうか疑問に思っているので、たくさんのループを実行するのを避けることができます.

ありがとう。

4

2 に答える 2

25
SELECT  DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff
FROM    Sessions
GROUP BY
        startdate
于 2010-04-27T14:52:31.893 に答える