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

Abbruchbedingung in Query

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von kwakz, 4 November 2013.

  1. kwakz

    kwakz Aktiver Benutzer

    Hallo zusammen,

    in meiner Datenbank sind Statusmeldungen mehrerer Module einer Produktionsanlage zusammengefasst. Diese Meldungen möchte ich in einem bestimmten Zeitraum auswerten. Ich kann jetzt zwar auf Meldungen reagieren, die innerhalb dieses Zeitraums liegen, weiß aber nicht, welchen Anfangszustand die Module haben.

    Als Beispiel: 10 Minuten nach Auswertungsbeginn wirft mir ein Modul eine Fehlermeldung raus ... ich weiß aber nicht, ob in diesen 10 Minuten das Modul gelaufen ist oder vielleicht schon mit einer anderen Fehlermeldung stand.

    Deswegen würde ich gern vom Beginn meines Auswertungszeitraums so weit in die Vergangenheit blicken, bis ich eine Meldung von der betreffenden Station finde. Die Suche müsste also abgebrochen werden, sobald ein ereignis gefunden wird (ähnlich einer while-Schleife).

    Gibt es da eine Möglichkeit, das zu realisieren?

    Mfg Daniel
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Du suchst also alle Datensätze kleiner ab dem Auswertungszeitpunkt, wo es eine Meldung gab?

    Sinngemäß also select * from ... where zeitpunkt > (select max(zeitpunkt) from ... where zeitpunkt < Auswertungszeitpunkt and fehlermeldung is not null)

    Oder versteh ich Dich falsch?
     
  3. kwakz

    kwakz Aktiver Benutzer

    Im Prinzip würde ich gerne ab einem bestimmten Zeitpunkt in der Datenbank so lange rückwärts gehen, bis ich auf eine Meldung vom selben Prozessmodul finde
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Sag ich doch. Du hast:

    Code:
    
    test=*# select * from kwakz ;
     zeit | meldung
    ------+---------
      1 |
      2 |
      3 | fehler
      4 |
      5 |
      6 | fehler2
      7 |
    (7 rows)
    
    Du willst nun ab Zeitpunkt 5 wissen, brauchst aber noch das, was vorher zuletzt als Meldung war:

    Code:
    test=*# select * from kwakz where zeit >= (select max(zeit) from kwakz where zeit < 5 and meldung is not null);
     zeit | meldung
    ------+---------
      3 | fehler
      4 |
      5 |
      6 | fehler2
      7 |
    (5 rows)
    
    Oder?
     
  5. ukulele

    ukulele Datenbank-Guru

    Da gibt es auf jedenfall schöne Möglichkeiten ohne den Einsatz von Schleifen etc. auszukommen. Könntest du mal ein paar Beispieldatensätze und Spaltennamen posten?
     
  6. kwakz

    kwakz Aktiver Benutzer

    Hallo zusammen,

    ich war etwas verwirrt von

    Code:
    where zeit >= (select max(zeit)
    Ich hab mir das jetzt noch ein bisschen umgeschrieben:

    Code:
    SELECT *
        FROM <database>
        WHERE MessageID=(
    SELECT MAX(MessageID)
            FROM <database>
            WHERE MessageTime < CAST('<date>' AS DATETIME) AND Station=<SelectedStation>)
    funktioniert wunderbar, vielen Dank!

    Mfg Daniel
     
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