2016-07-27 9 views
1

を動作するように経過クエリで経過時間を取得する手助けが必要です。一般的に私は、コンピュータが新しいOSにアップグレードするのにかかる時間を取得したい、マイナスそれとの間の時間の任意の期間は、障害によって引き起こされます。テーブルのは、私が動作するようにクエリを取得し、私は悩み、それを概念を持っています助けが必要

例は次のようになります。

timestamp     - status 

2016-07-19 14:25:59.000 Conversion In Progress 
2016-07-20 07:38:20.000 Failed - 04 
2016-07-26 07:15:59.000 Conversion In Progress 
2016-07-26 08:50:39.000 Conversion Successful 

あなたはそれが再びキックオフされたときに、変換が最初に失敗したときから大きなギャップがあることがわかります。私は報告の目的のためにこの期間を追加することを避けたい。私が今使っ

私のクエリはこれです:ログで

SELECT ROUND(AVG((b.ts - a.ts)/60), 0) 
FROM 
(
SELECT mach_name, timestamp, UNIX_TIMESTAMP(timestamp)as ts FROM w10_migration_log where status = 'Conversion In Progress' 
)a INNER JOIN 
(
SELECT mach_name, timestamp, UNIX_TIMESTAMP(timestamp)as ts FROM w10_migration_log where status = 'Conversion Successful' 
) b on a.mach_name = b.mach_name 

ほとんどのエントリに対処するための問題を持っていません。それは問題だろうか?

すべてのヘルプは大幅にテーブル構造をクエリのこのタイプのために適合されていないので、あなたがクエリを概念化することはできません驚くことではありません

答えて

0

を高く評価しています。したがって、正しい表構造を構築することから始める必要があります。あなたが達成しようとしている何のため

正しい構造は次のようになります。

クエリは非常に簡単になることで
| attempt_number | device | started_at | finished_at | status (success or failure) | 

:あなただけの各試みのためfinished_atstarted_at間の時間差の合計を作ることができます各(または所定の)コンピュータの今、私たちは、それはそう、単純そこから照会、(、いっそのか、あなたのテーブルをリファクタリング)その構造に類似し、一時テーブルまたはビューを構築するための最善の方法をこれを考え出したこと

。クエリ多かれ少なかれ私たちが望むビュー構築します。このような

:次に

SELECT start.mach_name, start.timestamp as started_at, stop.timestamp as finished_at 
FROM w10_migration_log start 
join w10_migration_log stop ON stop.timestamp > start.timestamp and stop.mach_name = start.mach_name 
where start.status = 'Conversion In Progress' 
group by start.timestamp; 

を非常に簡単にこの中から選択:

select SEC_TO_TIME(SUM(UNIX_TIMESTAMP(finished_at) - UNIX_TIMESTAMP(started_at))) 
FROM (
    /* directly the previous query, or a view made from the previous query */ 
); 

を私は簡単なテストを行なったし、と18:47:01を得たあなたのデータサンプル。

+0

ご返信いただきありがとうございます。あなたの投稿は理にかなって、私はテーブルを作成していないが、私はそれが変更され得ることについて見ることができるかもしれません。それにもかかわらず、ログに2つ以上のエントリがある場合はどうなりますか?私たちはいくつかのマシンで5,6回失敗しています。これはそのシナリオではうまくいかないようです。 – spas2k

+0

@ spas2k何をして動作しませんか?私は試行ごとに1行を提案しているので、2または6または20はまったく同じに動作するはずです。 – rlanvin

関連する問題