Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Addieren von Zeitenerfassungen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MiMeng, 28 November 2016.

  1. MiMeng

    MiMeng Aktiver Benutzer

    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:

  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. MiMeng

    MiMeng Aktiver Benutzer

    @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.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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)
    
    
     
  5. ukulele

    ukulele Datenbank-Guru

    datediff() ist dein Freund, vermutlich etwas wie:
    Code:
    SELECT sum(datediff(mm,zeit1,zeit2)) AS zeit_minuten FROM tabelle
     
  6. MiMeng

    MiMeng Aktiver Benutzer

    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:

  7. akretschmer

    akretschmer Datenbank-Guru

    vermutlich nicht, er will die Differenz zwischen den Zeilen haben.
     
  8. ukulele

    ukulele Datenbank-Guru

  9. akretschmer

    akretschmer Datenbank-Guru

    IIRC kann M$SQL das. Zumindest Versionen, die noch nicht gar zu gammlig riechen. PostgreSQL kann es seit 8.4, was schon seit einigen Jahren beerdigt ist. R.I.P.
     
  10. MiMeng

    MiMeng Aktiver Benutzer

    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??
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Update. Und wenn das zu teuer ist: Wechsel auf PostgreSQL. Kostet nix, kann sehr viel.
     
  12. MiMeng

    MiMeng Aktiver Benutzer

    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?
     
  13. akretschmer

    akretschmer Datenbank-Guru

    Hä?

    Features wie Window-Funktionen sind halt sehr mächtig. Du könntest versuchen, das via einer StoredProc nachzubilden. Vermutlich die aufwändigste aller Lösungen.
     
  14. ukulele

    ukulele Datenbank-Guru

    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
     
    Walter gefällt das.
  15. akretschmer

    akretschmer Datenbank-Guru

    In PG kamen lag() und row_number() in derselben Version. 8.4.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden