Addieren von Zeitenerfassungen

MiMeng

Aktiver Benutzer
Beiträge
28
Hallo Zusammen,

nach lange Zeit brauche ich euere Hilfe WIEDER!

Ich muss zeine Zeitspalte die verbrauchte Zeit zusammenfassen, d.h. das erste Ereigniss dat 7 Minuten gedauert und das zweite 5 Min. wie kann ich es zusammenaddieren? Ich habe die Spalte als Datetime festgelegt. Siehe Anhang.
Das zweite Problem ist, dass ich nur die Uhrzeit brauche, also ist es möglich die Datetime Spalte die Tage-Angabe ausblenden?

Gruß Meng
 

Anhänge

  • 2016-11-28 14_44_30-Microsoft SQL Server Management Studio.png
    2016-11-28 14_44_30-Microsoft SQL Server Management Studio.png
    13,7 KB · Aufrufe: 8
Werbung:
Zeiten kann man addieren, von 2 Timestamps kann man die Differenz als Zeit berechnen. In Deinem Bild ist mir nicht klar, was da wie zusammengehört.
 
@akretschmer

wie z.B im Bild, ich muss erste beide Zeilen die Zeit zusammenfassen, es entspricht 7:36 min + 11:30 min.
die erste Ruestzeit hat 7 min gedauert und die zeite 11 min. Mit DATEADD und SUM habe ich schon versucht, geht beide nicht aufgrund des datetime Formates.
 
Wenn Du über Zeilen das machen willst, brauchst Du Funktionen, um z.B. auf die Zeile vorher zugreifen zu können. Dazu gibt es Window-Funktionen wie z.B. lag() und first_value():

Code:
test=# select * from mimeng;
 id |  ts   
----+----------------------------
  1 | 2016-11-28 15:06:20.541592
  2 | 2016-11-28 15:11:20.541592
  3 | 2016-11-28 15:21:20.541592
  4 | 2016-11-28 15:31:20.541592
  5 | 2016-11-28 15:51:20.541592
(5 Zeilen)

test=*# select *, ts - lag(ts) over (order by ts) from mimeng;
 id |  ts  | ?column?
----+----------------------------+----------
  1 | 2016-11-28 15:06:20.541592 |
  2 | 2016-11-28 15:11:20.541592 | 00:05:00
  3 | 2016-11-28 15:21:20.541592 | 00:10:00
  4 | 2016-11-28 15:31:20.541592 | 00:10:00
  5 | 2016-11-28 15:51:20.541592 | 00:20:00
(5 Zeilen)
test=*# select *, ts - first_value(ts) over (order by ts) from mimeng;
 id |  ts  | ?column?
----+----------------------------+----------
  1 | 2016-11-28 15:06:20.541592 | 00:00:00
  2 | 2016-11-28 15:11:20.541592 | 00:05:00
  3 | 2016-11-28 15:21:20.541592 | 00:15:00
  4 | 2016-11-28 15:31:20.541592 | 00:25:00
  5 | 2016-11-28 15:51:20.541592 | 00:45:00
(5 Zeilen)
 
gehen die beide Window-Funktion bei MS SQL? Kann es sein, dass LAG() nur bei neuere Version geht? Diese Funktion kann ich bei mir irgendwie nicht nutzen....
 

Anhänge

  • 2016-11-28 14_44_30-Microsoft SQL Server Management Studio.png
    2016-11-28 14_44_30-Microsoft SQL Server Management Studio.png
    4,5 KB · Aufrufe: 3
Das habe ich nämlich vermutet. Bei uns im Unternehmen ist es leider ein ältere Version von MS SQL.... Gibt es noch ne Möglichkeit für die alte Versionen??
 
Sowie ich von der IT Abteilung verstanden habe, ein Wechsel auf PostgraSQL geht schon mal gar nicht, Update muss ich nochmal mit den klären, weil mehrere System drauf laufen. Also wenn die beide Möglichkeit nicht gehen, kann man die Erfassung gar nicht bei den alten Version?
 
Du kannst lag() auch imitieren:
Code:
WITH t AS (
SELECT ROW_NUMBER() OVER (ORDER BY asdf) AS zeile,*
FROM tabelle )
SELECT t1.*,t2.* FROM t t1 LEFT JOIN t t2 ON t1.zeile -1 = t2.zeile
 
Werbung:
Zurück
Oben