Abbruchbedingung in Query

kwakz

Aktiver Benutzer
Beiträge
29
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.042
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


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?
 

kwakz

Aktiver Benutzer
Beiträge
29
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
 

akretschmer

Datenbank-Guru
Beiträge
9.042
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

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?
 

ukulele

Datenbank-Guru
Beiträge
4.394
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?
 
Werbung:

kwakz

Aktiver Benutzer
Beiträge
29
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
 
Oben