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

Verbleibende Zeit zwischen 2 Spalten ermitteln(Datum)

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von SelectClue, 21 März 2015.

  1. SelectClue

    SelectClue Neuer Benutzer

    Hallo liebe Leute,

    bin hier seit heute in diesem Forum, da ich Hilfe benötige und einfach nicht draufkomme, obwohl es sicherlich sehr leicht ist :)

    Ich habe zwei Spalten "Arbeitszeit von(YYYY-MM-TT)" und "Arbeitszeit bis(YYYY-MM-TT)" nun die Frage:
    Wie Frage ich die verbleibende Zeit ab also in Tagen?

    Danke im Voraus :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du hast also z.B. so etwas:

    Code:
    test=*# select * from selectclue ;
     name  |  von  |  bis
    -------+------------+------------
     hans  | 2015-03-01 | 2015-03-25
     peter | 2015-03-10 | 2015-03-30
    (2 rows)
    
    Das kann man nun z.B. auf die einzelnen Tage aufdöseln:

    Code:
    test=*# select *, datum from selectclue sv, lateral (select * from generate_series(sv.von, sv.bis, '1day') datum) foo;
     name  |  von  |  bis  |  datum  |  datum   
    -------+------------+------------+------------------------+------------------------
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-01 00:00:00+01 | 2015-03-01 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-02 00:00:00+01 | 2015-03-02 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-03 00:00:00+01 | 2015-03-03 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-04 00:00:00+01 | 2015-03-04 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-05 00:00:00+01 | 2015-03-05 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-06 00:00:00+01 | 2015-03-06 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-07 00:00:00+01 | 2015-03-07 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-08 00:00:00+01 | 2015-03-08 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-09 00:00:00+01 | 2015-03-09 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-10 00:00:00+01 | 2015-03-10 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-11 00:00:00+01 | 2015-03-11 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-12 00:00:00+01 | 2015-03-12 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-13 00:00:00+01 | 2015-03-13 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-14 00:00:00+01 | 2015-03-14 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-15 00:00:00+01 | 2015-03-15 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-16 00:00:00+01 | 2015-03-16 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-17 00:00:00+01 | 2015-03-17 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-18 00:00:00+01 | 2015-03-18 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-19 00:00:00+01 | 2015-03-19 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-20 00:00:00+01 | 2015-03-20 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-21 00:00:00+01 | 2015-03-21 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-22 00:00:00+01 | 2015-03-22 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-23 00:00:00+01 | 2015-03-23 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-24 00:00:00+01 | 2015-03-24 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-25 00:00:00+01 | 2015-03-25 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-10 00:00:00+01 | 2015-03-10 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-11 00:00:00+01 | 2015-03-11 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-12 00:00:00+01 | 2015-03-12 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-13 00:00:00+01 | 2015-03-13 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-14 00:00:00+01 | 2015-03-14 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-15 00:00:00+01 | 2015-03-15 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-16 00:00:00+01 | 2015-03-16 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-17 00:00:00+01 | 2015-03-17 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-18 00:00:00+01 | 2015-03-18 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-19 00:00:00+01 | 2015-03-19 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-20 00:00:00+01 | 2015-03-20 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-21 00:00:00+01 | 2015-03-21 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-22 00:00:00+01 | 2015-03-22 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-23 00:00:00+01 | 2015-03-23 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-24 00:00:00+01 | 2015-03-24 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-25 00:00:00+01 | 2015-03-25 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-26 00:00:00+01 | 2015-03-26 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-27 00:00:00+01 | 2015-03-27 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-28 00:00:00+01 | 2015-03-28 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-29 00:00:00+01 | 2015-03-29 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-30 00:00:00+02 | 2015-03-30 00:00:00+02
    (46 rows)
    
    Nun wollen wir aber nur noch die Tage ab heute:

    Code:
    test=*# select *, datum from selectclue sv, lateral (select * from generate_series(sv.von, sv.bis, '1day') datum) foo where datum > current_date;
     name  |  von  |  bis  |  datum  |  datum
    -------+------------+------------+------------------------+------------------------
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-22 00:00:00+01 | 2015-03-22 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-23 00:00:00+01 | 2015-03-23 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-24 00:00:00+01 | 2015-03-24 00:00:00+01
     hans  | 2015-03-01 | 2015-03-25 | 2015-03-25 00:00:00+01 | 2015-03-25 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-22 00:00:00+01 | 2015-03-22 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-23 00:00:00+01 | 2015-03-23 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-24 00:00:00+01 | 2015-03-24 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-25 00:00:00+01 | 2015-03-25 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-26 00:00:00+01 | 2015-03-26 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-27 00:00:00+01 | 2015-03-27 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-28 00:00:00+01 | 2015-03-28 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-29 00:00:00+01 | 2015-03-29 00:00:00+01
     peter | 2015-03-10 | 2015-03-30 | 2015-03-30 00:00:00+02 | 2015-03-30 00:00:00+02
    (13 rows)
    
    Aber eigentlich wollen wir nur die Anzahl wissen, oder?

    Code:
    test=*# select name, count(*) from selectclue sv, lateral (select * from generate_series(sv.von, sv.bis, '1day') datum) foo where datum > current_date group by name;
     name  | count
    -------+-------
     peter |  9
     hans  |  4
    (2 rows)
    
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Von der Fingerübung mit LATERAL mal abgesehen: man kann natürlich auch schlicht und einfach die Differenz bilden zwischen heute und dem Enddatum. Aber das wäre zu einfach...
     
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