durch jede Reihe von looping habe ich eine Tabelle mit Stromausfall Informationen, die wie folgt ausseheneine Reihe basierte Lösung zu finden, statt in SQL
KEY OUTAGE TIME POWER LINE ID
1 1/1 2:30 pm 75
2 1/5 4:00 pm 247
3 1/5 6:00 pm 247
4 1/3 8:00 am 11
KEY ist nur der Primärschlüssel der Tabelle. Die Ausfallzeit sagt uns, wann der Ausfall aufgetreten ist, und die Stromleitungs-ID ist nur die Identifikationsnummer der Leitung, an der der Ausfall aufgetreten ist.
ich eine zweite Tabelle mit Zählerinformationen haben, die wie folgt aussieht,
event_ID event_timestamp event_info POWER LINE ID
44 1/5 1:45 pm power on 247
45 1/5 1:45 pm power on 247
46 1/5 3:45 pm fault detected 247
47 1/5 3:55 pm power off 247
48 1/5 3:58 pm power off 247
49 1/5 5:15 pm power on 247
50 1/5 5:45 pm power off 247
51 1/5 5:50 pm power off 247
52 1/5 5:55 pm power off 247
53 1/5 5:59 pm power off 247
Ziel ist die folgende: Für jeden Ausfall, wählen Sie die alle Zähler Ereignisse, die vor dem Ausfallzeit auf dieser Stromleitung passiert und nach dem letzten "Power-On" -Signal, das auf dieser Stromleitung aufgetreten ist.
Zum Beispiel, für Ausfall # 2, würden wir alle Zähler Ereignisse vor 1/5 16:00 Uhr (Ausfallzeit), aber alle Ereignisse, die nach 1/5 13:45 Uhr aufgetreten sind, seit diesem ist das letzte "Power On" -Signal, das vor dem Ausfall aufgetreten ist. Für den Ausfall # 3 würden wir uns alle Ereignisse anschauen, die vor dem 15.5. 18:00 Uhr (Ausfallzeit) aufgetreten sind, aber nach dem 15.05.15 Uhr, da dies das letzte "Power-On" -Signal ist, das aufgetreten ist vor der Ausfallzeit.
Ich habe dies mit einem Cursor gemacht, der die Ausfalltabelle durchläuft und eine gespeicherte Prozedur aufruft, die die gewünschten Ereignisse aus der Ereignistabelle auswählt, aber diese Tabellen sind sehr groß und der Cursor dauert zu lange. Ich würde gerne wissen, wie man sich an dieses Problem annähern kann. Vielen Dank!
EDIT: Sorry, ich habe völlig vergessen, die Beispielausgabe zu veröffentlichen. Hier ist es.
EDIT (wieder): Ich suche nach einer Lösung für diese in Oracle. Es tut mir leid für die Änderungen, zum ersten Mal hier eine Frage zu stellen.
Ich habe mehrdeutige DBMS-Tags aus der Bearbeitung entfernt, die die richtige enthalten würden. Die Antworten können für verschiedene Datenbanksysteme spezifisch sein. –
Verstehe ich diese Frage? Möchten Sie für jede "Ausfall" -Reihe in Ihrer Tabelle alle "Ereignis" -Reihen ** außer denen mit Zeitstempeln zwischen dem Ausfallzeitstempel und dem größten "Power-On" -Zeitstempel auswählen? Eine weitere Frage: Was sind die Datentypen in den Tabellen der Spalten 'OUTAGE TIME' und 'event_timestamp'? –
@jpw Ich habe die Beispielausgabe hinzugefügt – user6147110