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

  • 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


  • #2
    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.

    Kommentar


    • #3
      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)
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        besten dank akretschmer, funktioniert genau so, wie ich mir das vorstelle!

        Kommentar


        • #5
          Zitat von dipo01 Beitrag anzeigen
          besten dank akretschmer, funktioniert genau so, wie ich mir das vorstelle!
          Freut mich!
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar

          Lädt...
          X