Announcement

Collapse
No announcement yet.

zeitliche Lücken im Datenbestand ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • zeitliche Lücken im Datenbestand ermitteln

    Hallo,

    für mein Monitoring überwache ich verschiedene Rechner. Diese senden jeweils alle 15 sek. ein Statussignal. Dieses wird abgefangen und zusammen mit dem Timestamp in die DB geschrieben.
    Am Ende eines Tages sollen Unterbrechungen ermittelt werden. Eine Unterbrechung liegt vor, wenn die Zeitdifferenz zweier aufeinanderfolgender Signale einer Station, größer 15 sek. ist.
    Was ich nun benötige, sind die beiden Timestamps "interruptionBeginn" sowie "interruptionEnd"
    Hat jemand eine gescheite Abfrage für dieses Problem?
    Besten Dank im Vorraus.

  • #2
    Hallo,
    Originally posted by komplexor View Post
    ...zweier aufeinanderfolgender Signale einer Station
    Definiere "aufeinanderfolgende Signale"! SQL kennt keine "Reihenfolge" oder "aufeinanderfolgende" Datensätze. Eine Reihenfolge entsteht immer nur durch entsprechende Sortierung.

    Originally posted by komplexor View Post
    ...Hat jemand eine gescheite Abfrage für dieses Problem?
    Sorry, aber wovon soll man ausgehen? Ich könnte mir jetzt ausdenken wie deine Tabelle strukturiert sein KÖNNTE, um das Problem relativ einfach zu lösen, aber die Mühe wäre mit Sicherheit vergebens solange nicht mindestens die o.a. Frage geklärt ist.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Aufeinanderfolgend heißt wie bereits beschrieben, das i.d.R. alle 15 sek. ein Signal kommt und in die DB geschrieben wird. Eine Unterbrechung ist dann z.B. zwischen ID 2804 und 2858. Hierfür benötige ich halt den Anfang der Unterbrechung und das Ende. Es kann auch passieren, dass im Anschluss wieder eine Unterbrechung vorliegt, in diesem Fall sollte dann der Start-Timestamp der ersten Unterbrechung und der End-Timestamp der letzten Unterbrechung ermittelt werden.

      Comment


      • #4
        Originally posted by komplexor View Post
        Aufeinanderfolgend heißt wie bereits beschrieben, das i.d.R. alle 15 sek. ein Signal kommt ...
        Und wie ich bereits geschrieben habe, kennt SQL keine "aufeinanderfolgenden Datensätze"! Du musst anhand deiner DATEN formulieren was der "Nächste" bzw. "Vorige" Datensatz ist. Anhand deines Bildes könnte man annehmen es ist der Datensatz mit dem kleinsten Datum welches größer als das gerade gewählte ("Nächster") bzw. das grösste Datum aller kleineren als das gerade gewählte ("Voriger") ist. Aber um das konkret zu sagen kenne ich deine Datenstruktur nicht, die hast du ja bis jetzt geheim gehalten ...

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hallo Falk,

          zunächst mal danke für deine Mithilfe, aber ich glaube ich verstehe nicht genau was du meinst. Die Datenstruktur ist doch eigentlich erkennbar:
          ID(int AUTO_INCREMENT), RECHNER(varchar), TIMESTAMP(datetime)
          Die Lücken in den ID's sind andere Rechner, habe zur Ansicht halt nur einen Rechner ausgewählt. Von der Sortierung her ist deine Annahme korrekt, der nachfolgende Datensatz ist der mit dem größeren Timestamp.

          Comment


          • #6
            Originally posted by komplexor View Post
            ...Die Datenstruktur ist doch eigentlich erkennbar:
            ID(int AUTO_INCREMENT), RECHNER(varchar), TIMESTAMP(datetime)
            Die Lücken in den ID's sind andere Rechner, habe zur Ansicht halt nur einen Rechner ausgewählt. ...
            Das ist für dich klar, aber woher bitte soll ich das wissen!? Ich bin zwar Glaskugelschauerei gewohnt, aber im Endeffekt ist das immer sinnlose Arbeit, weil hinterher dann was nachkommt nach dem Motto: "Ist ja schön und gut, aber bei mir ist noch das und das und das und geht so nicht..."

            Wenn man davon ausgeht, dass der "Nachfolger" der mit dem Kleinsten aller größeren Timestamps ist, dann wäre sowas denkbar:
            [highlight=sql]
            select a.ID, a.RECHNER, a.TIMESTAMP interruptionBeginn, (
            SELECT min(b.TIMESTAMP)
            from <table> b
            where b.TIMESTAMP > a.TIMESTAMP
            and b.RECHNER = a.RECHNER) interruptionEnd
            from <table> a
            where TIME_TO_SEC(TIMEDIFF((
            SELECT min(b.TIMESTAMP)
            from <table> b
            where b.TIMESTAMP > a.TIMESTAMP
            and b.RECHNER = a.RECHNER), a.TIMESTAMP)) > 15
            [/highlight]

            Abzuprüfen wäre hier noch der jeweilige "Randdatensatz", zu dem es aktuell noch keinen Nachfolger gibt und der ja ggfs. auch schon überfällig sein könnte. Das liese sich ggfs. mit einem IFNULL und CURTIME lösen.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment

            Working...
            X