2017-09-18 2 views
0

Ich bleibe beim Erzeugen einer SQL-Abfrage hängen. Ich habe eine Tabelle in einer Firebird DB wie die folgenden:Wie Zwischensummen mit Zeit Datentyp in SQL erhalten?

ID | PROCESS | STEP | TIME 
654 |  1 | 1 | 09:08:40 
655 |  1 | 2 | 09:09:32 
656 |  1 | 3 | 09:10:04 
... 
670 |  2 | 15 | 09:30:05 
671 |  2 | 16 | 09:31:00 

und so weiter.

Ich brauche die Zwischensummen für jede Prozessgruppe (Es ist etwa 7 davon). Die Tabelle hat den "time" -Typ für die Spalte TIME. Ich habe es mit DATEDIFF versucht, aber es funktioniert nicht.

+0

Möchten Sie Ihre Abfrage, um die Zeit von jedem Schritt ausgegeben zurückzukehren, oder die von jedem Prozess verbrachte Zeit? – p1erstef

+0

Von jedem Prozess. Ich weiß, ich muss SUM verwenden, kann aber nicht herausfinden, in welcher Kombination mit anderen SQL-Funktionen – user3189986

+0

Genau was versuchst du zu tun? –

Antwort

1

Sie benötigen SUM

Diese Frage verwenden hat hier beantwortet.

How to sum up time field in SQL Server

und hier.

SUM total time in SQL Server

Für spezifischere Firebird Dokumentation. Lesen Sie hier die Summenfunktion.

Sum() - Firebird Official Documentation

+0

Vielen Dank für Ihre Antwort. Ich habe die Beiträge gelesen und habe die Lösungen ohne Erfolg ausprobiert. Wenn ich die Lösung von hier versuchen [Link] (https://StackOverflow.com/q/9725732/2468342) bekomme ich eine Ausnahme der Auswertungsauswertung -> '0:00:00 ist kein TIME-Typ' – user3189986

+0

Veröffentlichen Sie Ihre Abfrage in der Frage. –

1

Ich denke, Sie sollten „GROUP BY“ verwenden, um maximale Zeit und min Zeit zu bekommen, und sie in der datediff Funktion zu verwenden. So etwas ähnliches:

select process, datediff(second, max(time), min(time)) as nb_seconds 
from your_table 
group by process;