Hallo zusammen,
ich habe folgendes Problem. Vorliegend habe ich eine Tabelle mit mehreren Millionen Einträgen. Hier sind mehrere Millionen Items gelistet, die mehrfach vorkommen können. Es handelt sich hierbei um eine unsortiere Historie der Items.
Eine Verbindung zwischen den Historieneinträgen eines jeden Items wird über die "item_list_id" hergestellt. Jedes Item hat einen Bezug zum vorherigen Historieneintrag durch "_item_list_id_prev" und zum nachfolgenden "_item_list_id_next".
Da es auch Items gibt die nur einen Eintrag haben, bzw. es auch immer ein erstes Item geben muss, was keinen "_item_list_id_prev" Eintrag hat (NULL), macht mir eine Abfrage Probleme.
Ich möchte eine Abfrage starten, die mir jeweils die vorangegangenen zwei Einträge auch anzeigt. Der erste Ansatz hierzu sah folgendermaßen aus:
Nun habe ich jedoch das Problem, dass aufgrund der Restriktion
"and prev.pro_item_list_prev=prev2.pro_item_list_id"
alle Ergebnisse rausfliegen, bei denen es keine zwei Vorgänger gibt. Hier sollte jedoch ein Ergebnis angezeigt werden (als NULL).
Nun bin ich einen Schritt weitergegangen und habe dies mit einer Unterabfrage versucht:
Hier habe ich nur eine! Vorstufe drin, da mir hier die Performance schon total zusammenbricht.Das Ergebnis zeigt mir nun zwar alle Datensätze an (gegebenefalls für die Vorgängerwerte ein NULL), die Abfrage scheint aber nicht praktikabel zu sein, da mir bei einer weiteren Vorstufe (Unter/Unterabfrage) alles "in die Knie" geht.
Gibt es vielleicht eine Möglichkeit die erste (schnelle) Abfrage irgendwie umzubauen?
Ich hoffe mein Problem ist nicht zu abstrakt (sonst gerne nachfragen). Ich würde mich freuen, wenn jemand eine Idee zu meinem Problem hat.
Im Voraus für jede Hilfe besten Dank.
VG
ich habe folgendes Problem. Vorliegend habe ich eine Tabelle mit mehreren Millionen Einträgen. Hier sind mehrere Millionen Items gelistet, die mehrfach vorkommen können. Es handelt sich hierbei um eine unsortiere Historie der Items.
Eine Verbindung zwischen den Historieneinträgen eines jeden Items wird über die "item_list_id" hergestellt. Jedes Item hat einen Bezug zum vorherigen Historieneintrag durch "_item_list_id_prev" und zum nachfolgenden "_item_list_id_next".
Da es auch Items gibt die nur einen Eintrag haben, bzw. es auch immer ein erstes Item geben muss, was keinen "_item_list_id_prev" Eintrag hat (NULL), macht mir eine Abfrage Probleme.
Ich möchte eine Abfrage starten, die mir jeweils die vorangegangenen zwei Einträge auch anzeigt. Der erste Ansatz hierzu sah folgendermaßen aus:
Code:
select pm.item_nr, pm.vdat Verarbeitung_M, trunc(prev.vdat) Fehlertag , prev.mkz Bearbeiter1, prev.vart ART1, prev.vdat, prev2.mkz, prev2.vart, prev2.vdat from pm_item_list pm, pm_item_list prev, pm_item_list prev2 where pm.vdat_jul= 2455520 and pm.status=31 and pm.pro_item_list_prev=prev.pro_item_list_id and prev.pro_item_list_prev=prev2.pro_item_list_id
"and prev.pro_item_list_prev=prev2.pro_item_list_id"
alle Ergebnisse rausfliegen, bei denen es keine zwei Vorgänger gibt. Hier sollte jedoch ein Ergebnis angezeigt werden (als NULL).
Nun bin ich einen Schritt weitergegangen und habe dies mit einer Unterabfrage versucht:
Code:
select pm.item_nr, pm.vdat Verarbeitung_M, ( select prev.mkz from pm_item_list prev where pm.pro_item_list_prev=prev.pro_item_list_id) Mitarbeiter_1, ( select prev.vart from pm_item_list prev where pm.pro_item_list_prev=prev.pro_item_list_id) Mitarbeiter_art1 from pm_item_list pm where pm.vdat_jul=2455520 and pm.status=31
Gibt es vielleicht eine Möglichkeit die erste (schnelle) Abfrage irgendwie umzubauen?
Ich hoffe mein Problem ist nicht zu abstrakt (sonst gerne nachfragen). Ich würde mich freuen, wenn jemand eine Idee zu meinem Problem hat.
Im Voraus für jede Hilfe besten Dank.
VG
Comment