2016-07-22 7 views
1

Ich muss den Zeitunterschied zwischen zwei Ereignissen erhalten, die als Zeilen in derselben Tabelle dargestellt werden. Unter anderem hat die Reihe die folgenden Felder:Subtrahiere zwei Daten mit passendem Feld und einen anderen spezifischen Feldwert in SQL Tabelle

JobNum 
EventDate 
Event 

Das Event Feld zu sehen verwendet wird, wenn das Ereignis der Beginn oder das Ende für diesen Job ist.

Ich brauche die Zeitunterschiede zwischen dem EventDate Feld, wo JobNum das gleiche ist. Da es mehrere Ereignisse für ein einzelnes JobNum sein kann, ich muß auch angeben, dass JobNum gleich ist und zu subtrahieren nur die Zeile, in EventDate= 'Starting' aus der Reihe mit EventDate = 'Finished' (Es wird nur immer ein Starting und ein Finished Ereignis pro JobNum).

Das folgende ist so weit ich bekommen haben funktioniert, aber es ist nicht:

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 

Es läuft teilweise, sondern gibt dann den folgenden Fehler:

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

Ich habe auch einen Blick auf diese Frage aber konnte nicht herausfinden, wie man den Code ändert, um für meine Situation zu arbeiten. How to get difference between two rows for a column field?

Jede Hilfe würde sehr geschätzt werden.

+0

ist es nur einen einzigen Datensatz von 'Starting' bestätigen und' Finished' pro JobNum? Sieht so aus, als ob deine Daten nicht funktionieren. – Squirrel

Antwort

2

Wenn ich Ihre Frage richtig zu verstehen, ist hier eine Option 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

Danke. Lief wie am Schnürchen. Jetzt muss ich etwas über bedingte Aggregation lernen. :) – mike100111

Verwandte Themen