Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfrage fehlende Tage in Tabelle

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • dipo01
    hat ein Thema erstellt SQL Abfrage fehlende Tage in Tabelle.

    SQL Abfrage fehlende Tage in Tabelle

    Guten Tag alle zusammen erst mal hier!
    Ich sitze gerade vor einem Problem und komm leider von alleine nicht auf die Lösung! Vielleicht kann mir jemand von euch weiter helfen!

    Ich habe eine Tabelle mit einer Spalte Datum und einem Wert dazu. Über einen Cronjob sollte hier jeden Tag ein Wert und das zugehörige Datum gespeichert werden. Leider schlägt der Cronjob ab und zu fehl, was dazu führt, dass ich von diesem Tag leider keine Werte habe. Ich hab das Script mittlerweile so angepasst, dass bei einem fehlgeschlagenen Job ein Mail ausgeschickt wird.

    Es geht aber jetzt um Einträge aus den vergangenen zwei Jahren, und ich will das nicht manuell überprüfen.
    Kann ich über ein SQL Statement herausfinden, an welchen Tagen kein Eintrag in der Tabelle geschrieben wurde?

    Danke schon mal und LG

  • akretschmer
    antwortet
    Zitat von dipo01 Beitrag anzeigen
    besten dank akretschmer, funktioniert genau so, wie ich mir das vorstelle!
    Freut mich!

    Einen Kommentar schreiben:


  • dipo01
    antwortet
    besten dank akretschmer, funktioniert genau so, wie ich mir das vorstelle!

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von dipo01 Beitrag anzeigen
    Es geht aber jetzt um Einträge aus den vergangenen zwei Jahren, und ich will das nicht manuell überprüfen.
    Kann ich über ein SQL Statement herausfinden, an welchen Tagen kein Eintrag in der Tabelle geschrieben wurde?

    Danke schon mal und LG
    Angenommen, Du hast:

    Code:
    test=*# select * from messung ;
       datum    | val
    ------------+-----
     2014-10-25 |  12
     2014-10-26 |  15
     2014-10-28 |  10
     2014-10-29 |   8
     2014-10-30 |  18
     2014-11-01 |  28
     2014-11-02 |  20
     2014-11-03 |  12
    (8 rows)
    Angefangen hast Du aber schon am 22.10., und willst nun alle diese Fehltage:

    Code:
    test=*# select * from (select ('2014-10-22'::date + s * '1day'::interval)::date as datum from generate_series(0, (select current_date - '2014-10-22'::date))s) foo left join (select datum from messung) as haben on foo.datum=haben.datum where haben.datum is null;
       datum    | datum
    ------------+-------
     2014-10-22 |
     2014-10-23 |
     2014-10-24 |
     2014-10-27 |
     2014-10-31 |
     2014-11-04 |
    (6 rows)
    
    -- oder sauberer:
    
    test=*# select foo.datum from (select ('2014-10-22'::date + s * '1day'::interval)::date as datum from generate_series(0, (select current_date - '2014-10-22'::date))s) foo leftjoin (select datum from messung) as haben on foo.datum=haben.datum where haben.datum is null;
       datum
    ------------
     2014-10-22
     2014-10-23
     2014-10-24
     2014-10-27
     2014-10-31
     2014-11-04
    (6 rows)

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    Könntest es mit "SELECT ... * FROM {alle_daten} NOT IN(SELECT datum FROM tabelle)" versuchen. {alle_daten} könntest du durch nen Subquery ersetzen, z.B. http://stackoverflow.com/questions/2...rom-date-range (Hab das nicht überprüft, aber der Output sieht so aus wie das was du haben möchtest.

    Einen Kommentar schreiben:

Lädt...
X