【MySQL】時刻を絞り込んでDATETIMEの差の平均を計算する

やりたいこと

テーブルにバッチの開始時刻と終了時刻が記録されている。

ある時刻にバッチを実行した際の終了時刻を予測したいが、開始時刻によって実行時間にばらつきがある。

そこで、特定の開始時刻に絞り込んで平均実行時間を計算したい。

手順

以下のクエリを実行する。

12:00:00より前に実行されたバッチの実行秒数の平均

SELECT AVG(TIMESTAMPDIFF(SECOND, {開始DATETIME}, {終了DATETIME})) FROM {テーブル名} WHERE TIME({開始DATETIME}) < '12:00:00';

12:00:00より後に実行されたバッチの実行秒数の平均

SELECT AVG(TIMESTAMPDIFF(SECOND, {開始DATETIME}, {終了DATETIME})) FROM {テーブル名} WHERE TIME({開始DATETIME}) > '12:00:00';

08:00:00 ~ 12:00:00に実行されたバッチの実行秒数の平均

SELECT AVG(TIMESTAMPDIFF(SECOND, {開始DATETIME}, {終了DATETIME})) FROM {テーブル名} WHERE TIME({開始DATETIME}) BETWEEN '08:00:00' AND '12:00:00';

関数について

AVG()

対象の平均値を返す集約関数の1つ。

TIMESTAMPDIFF()

日付や時間の差を計算して、指定した単位で返す関数。

第1引数にはYEAR,MONTH,DAY,HOUR,MINUTE,SECONDなど、返却してほしい時間の単位を指定する。

第2引数に引く値を、第3引数には引かれる値を指定する。

DATEとDATETIMEを混在させた場合、DATEには’00:00:00’が付加される。

TIME()

DATETIMEの時間部分を抽出する関数。

コメントを残す

メールアドレスが公開されることはありません。