2017-03-20 4 views
0

Ich möchte den Wert der ersten Zeile von dem Wert der zweiten Zeile der Spalte _timestamp (siehe unten) subtrahieren. _number ist die Bestellspalte in meinen Daten.SQL - Operand Datentyp datetime2 ist ungültig für subtrahieren Operator

enter image description here

und das Ergebnis in einer neuen Spalte namens diff. Ich habe es mit der folgenden Abfrage

use dbtest 

select t2._number, t2._timestamp, 
coalesce(t2._timestamp - 
    (select t1._timestamp from dbo.tcp t1 where t1._number = t2._number + 1), t2._timestamp) as diff 
from dbo.tbl t2 

versucht, aber ich bekomme den folgenden Fehler.

Msg 8117, Level 16, State 1, Line 4 
Operand data type datetime2 is invalid for subtract operator. 

Irgendwelche Tipps würden geschätzt. Ich habe einen großen Datensatz und ich möchte es automatisch für die gesamte Spalte anwenden. Ich verwende SQL Server 2008.

+2

Siehe datediff Funktion https://msdn.microsoft.com/en-us/library/ms189794.aspx – Serg

+0

Verwendung datediff https://msdn.microsoft.com/en-us/library/ms189794.aspx Benötigen Sie nur zwei Zeilen oder alle Datensätze? – McNets

+0

Nein, ich möchte es auf alle Datensätze anwenden (ca. 300.000 Zeilen) –

Antwort

2

Wie in den Kommentaren erwähnt, können Sie keine Zeitstempel mit - Operator subtrahieren. Verwenden Sie stattdessen die Funktion DATEDIFF. Verwenden Sie OUTER APPLY, um den Unterschied zwischen der aktuellen Zeile und den Zeitstempeln der nächsten Zeile zu ermitteln.

select t2._number,t2._timestamp, 
datediff(microsecond,t2._timestamp,t1._timestamp) as diff 
from dbo.tbl t2 
outer apply (select t1._timestamp 
      from dbo.tcp t1 
      where t1._number = t2._number + 1) t1 

Edit: Um update eine Spalte mit dem Namen diff pro Kommentar des OP,

with cte as (   
select t2._number,t2._timestamp, t2.diff, 
datediff(microsecond,t2._timestamp,t1._timestamp) as diff_col 
from t t2 
outer apply (select t1._timestamp 
      from t t1 
      where t1._number = t2._number + 1) t1 
    ) 
update cte set diff=diff_col; 
+0

meinst du die Spalte 'diff' mit den Ergebnissen der obigen Abfrage aktualisieren? –

+1

@DestaHaileselassieHagos .. siehe die Bearbeitung .. Sie können eine CTE verwenden, um zu aktualisieren. –

Verwandte Themen