2016-07-22 6 views
1

同じテーブルの行として表される2つのイベントの時間差を取得する必要があります。なかでも、行は次のフィールドがあります。フィールドと一致する2つの日付とSQLテーブルの別の特定のフィールド値を減算します

JobNum 
EventDate 
Event 

Eventフィールドは、イベントがそのジョブの開始や終了であるかどうかを確認するために使用されています。

JobNumが同じであるEventDateフィールドの時間差を取得する必要があります。単一JobNumのための複数のイベントが存在する可能性があるため、私はまたJobNumが同じであり、唯一の(常にのみJobNumにつき1つのStartingと1 Finishedイベントがあります)EventDate = 'Finished'で行から行EventDate= 'Starting'を減算するように指定する必要があります。

次は、私の知る限りは得ているが、そのが動作していないようです。

Select a.[AutoNumber], DATEDIFF(SECOND, (SELECT m.EventDate 
               FROM [myTable] m 
               WHERE m.Event = 'Starting' and a.JobNum= m.JobNum), 
             (SELECT m.EventDate 
               FROM myTable m 
               WHERE m.Event = 'Finished' and a.JobNum= m.JobNum) 
     ) 
     From myTable a 

それは部分的に実行されますが、その後、次のエラーを与える:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

私もこれを見ていました私の状況で動作するようにコードを修正する方法を理解することができませんでした。 How to get difference between two rows for a column field?

ご協力いただければ幸いです。

+0

は、それが 'Starting'と' Finished'あたりJOBNUMの唯一の1つのレコードを確認するのですか?あなたのデータがそうでないように見えます。 – Squirrel

答えて

2

私が正しくあなたの質問を理解していた場合は、ここでconditional aggregationを使用して一つの選択肢です:

Select [AutoNumber], 
     datediff(second, 
       max(case when event = 'starting' then EventDate end), 
       max(case when event = 'Finished' then EventDate end) 
     ) 
From myTable a 
Group By [AutoNumber] 
+0

ありがとうございます。魅力のように働いた。今、私は条件付き集計について学ぶ必要があります。 :) – mike100111

関連する問題