2016-08-09 20 views
3

Ich verwende SQL Server 2008. Ich habe mehrere Zeilen von start_time und end_time. Ich möchte den durchschnittlichen Unterschied zwischen diesen beiden Zeiten in einem MM: SS-Format berechnen.Zeigen Sie die durchschnittliche Differenz zwischen zwei Zeitfeldern als MM: SS in SQL

start_time | end_time  
10:15:30 | 10:15:45  
10:45:00 | 10:47:30 

Zeile 1 wäre ein Unterschied von 00:15, und Zeile 2 wäre ein Unterschied von 02:30. Der Durchschnitt des gesamten Datensatzes wäre 01:23 (1 Minute und 23 Sekunden).

Der Code, den ich verwende, sieht wie folgt aus, gibt aber nur eine ganze Zahl zurück.

AVG(DATEDIFF(MI,start_time,end_time)) 

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

1

Sie sind in der Nähe, aber man sollte DateDiff() verwenden, um die durchschnittliche Anzahl von Sekunden zwischen den beiden Feldern zu erhalten, anstatt die durchschnittliche Anzahl von Minuten.

Mit SQL Server 2008 R2, Sie haben keinen Zugriff auf TIMEFROMPARTS(), die die Anzeige erheblich vereinfachen würde, so dass Sie diese in eine VARCHAR umwandeln müssen das Format erhalten Sie wollen.

;With AverageSeconds As 
(
    Select Avg(DateDiff(Second, Start_Time, End_Time))) AvgSec 
    From YourTable 
) 
Select Right('00' + Convert(Varchar, (AvgSec/60)), 2) 
      + ':' 
     + Right('00' + Convert(Varchar, (AvgSec % 60)), 2) 
From AverageSeconds 
+0

Dies funktioniert, danke! –

0

Sie können die Daten in unixtimestamp konvertieren und dann die Sekunden in einer Zeichenfolge konvertieren.

0

Alternativ

right(convert(varchar(20), Dateadd(second, Avg(Datediff(second, Start_Time, End_Time)), 0), 120), 5) 
+0

Perfekt, danke! –

Verwandte Themen