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

Neue Herausforderung für SQL Kniffler

Dieses Thema im Forum "Oracle" wurde erstellt von atlantis, 7 Oktober 2020.

  1. atlantis

    atlantis Benutzer

    Nachdem ich hier im Forum schon 2x sehr adäquate Hilfe bekommen habe ich mal wieder eine Nuss, die ich nicht selber knacken kann und schon seit einiger Zeit vor mir her schiebe...



    Habe in einer Tabelle seit Jahren Preise zu Teilenummern mitgeschrieben, jeweils mit Einsatzdatum und Enddatum, um später eine Preisentwicklung darstellen zu können.

    Um nicht jeden Tag auch bei gleichem Preis zum Vortag einen neuen Eintrag zu generieren habe ich stets in einer Spalte "Latest" den neusten Eintrag zu einer Teilenummer markiert. Erst wenn sich der neue Wert vom Latest Wert verändert hat wurde ein neuer Eintrag zur jeweiligen Teilenummer generiert mit Gültig ab dem Tagesdatum. Der vorangegangene Datensatz wurde mit einem gültig bis versehen mit gleichem Tagesdatum.


    Das hat auch recht gut funktioniert. Leider hat meine (externe) Datenquelle über die Laufzeit zwischendurch ein paarmal Probleme bei der Übermittlung der Preise gehabt, was mir dann Zwischendurch plötzlich
    mal 10fache 100fache oder 1000fache Werte des Teilepreises geliefert hat, da wahrscheinlich dort das Komma in der Export-Konvertierung einfach ignoriert wurde.

    Die Preise selbst haben sich selbst im Bereich kleiner 20% verändert, so dass man diese Ausreisser deutlich erkennen kann.



    Jetzt sitze ich vor eine Giganto-Tabelle mit 8,4 Mio. Einträgen bei ca. 1,2Mio unterschiedlichen Teilenummern, also ca. 8 pro Teilenummer, die ich gerne per SQL wieder korrigieren möchte.



    Mein Ansatz war, gehe die Preistabelle per Schleife TLN für TLN durch und ersetze alle Preise, die es auch mit genau dem gleichem Betrag um den Faktor 1:10, 1:100 und 1:1000 gibt durch den jeweils kleinsten Wert dieser Teilenummer aus der Teilmenge 1:10, 1:100, 1:1000.



    In Anbetracht dieser gigantischen Datenmenge glaube ich jedoch, dass dieser Ansatz mit 2 verschachtelten Schleifen nie zu einem Ende kommen wird.

    Hat jemand einen eine Anregung, wie ich ggf. über Hilfstabellen, oder mehrere Schritte zum Ziel kommen könnte?



    Ich habe mal die Testtabelle mit Datensätze von 3 Teilenummern als Anhang angehängt, um die Datenstruktur klar zu machen.



    Bin gespannt auf Eure Anregungen…
     

    Anhänge:

  2. dabadepdu

    dabadepdu Datenbank-Guru

    Wieso werden die falschen nicht gelöscht, statt andere zu flaggen?
    Oder musst Du den Müll aus Gründen behalten?

    Eine Abfrage könnte man z.B. so anlegen:
    Code:
    select * from test_preis x1 join test_preis x10 on (x1.tln,x1.preis) = (x10.tln,x10.preis*10)
    oder falls dein Oracle das noch nicht kann
    Code:
    select * from test_preis x1 join test_preis x10 on x1.tln = x10.tln and x1.preis = x10.preis*10)
    Ob das genau die Problemfälle ergibt, ob man noch Datumsgrenzen berücksichtigen muss usw. kannst Du sicher am besten beurteilen.
     
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