Abfrage mit Vergleich vorheriger Historien

derhenry

Fleissiger Benutzer
Beiträge
54
Hallo zusammen,
ich sitze seit gestern vor einem Problem, bei dem ich Eure Hilfe benötige.
In einer Kundendatenbank habe ich für jeden Kunden einen monatlichen Satz, der u.a. die Vertragsbedingungen enthällt. Diese Bedingungen dürfen im Jahr der Erfassung eines Kunden geändert werden. Danach aber nicht mehr. Im Beispielfall seht Ihr also eine verbotene Änderung von 1234 auf 8888 im Januar 2016, obwohl der Kunde 2015 erfasst wurde.

Stand Kunde Bedingung Erfassung

01.08.2015 4711 1234 2015
01.09.2015 4711 1234 2015
01.10.2015 4711 1234 2015
01.11.2015 4711 1234 2015
01.12.2015 4711 1234 2015
01.01.2016 4711 1234 2015
01.02.2016 4711 8888 2015
01.03.2016 4711 8888 2015
01.04.2016 4711 8888 2015

Wir kann ich nun alle Kundennummern abfragen, die
a) eine erlaubte und
b) eine unerlaubte Änderung erfahren haben?

Vielen Dank für Eure Hilfe!
Grüße und schönes Wochenende!
 
Werbung:
nicht erlaubt:
Code:
SELECT   DISTINCT Kunde
FROM   tabelle
WHERE   Erfassung != datepart(yyyy,Stand)
erlaubt (es existieren ausschließlich erlaubte Datensätze):
Code:
SELECT   *
FROM   tabelle
WHERE   Kunde NOT IN (   SELECT   DISTINCT Kunde
             FROM   tabelle
             WHERE   Erfassung != datepart(yyyy,Stand) )
Es gibt aber noch andere Wege das zu lösen, nicht nur mit NOT IN.
 
Moin!
Danke für das Feedback. Aber das haut nicht hin.
Es kann ja durchaus sein (bzw. ist die Regel), dass es einen Datensatz gibt, bei dem Erfassungs- und Standjahr voneinander abweichen. Relevant ist der Zeitpunkt des Wechsels.
 
Verstehe ich nicht, ein unzulässiger Datensatz definiert sich doch dadurch das Stand in einem anderen Jahr liegt als Erfassung oder irre ich?
 
Einen neuen Datensatz wird jeden Monat hinzugefügt. Auch, wenn sich an den hier ausschnittweise dargestellten Spalten nichts ändert.
Wurde der Kunde 2015 erfasst und 2015 die Bedingungen geändert, werden sich Stand- und Erfassungsdatuim in 2016 unterscheiden - und der Vorgang war dennoch zulässig.
Wurde der Kunde 2015 erfasst und 2016 die Bedingungen geändert, war der Vorgang unzulässig.

Es kommt also darauf an, ob die Änderung (Bedingungs-ID des Standes <> die des nächsten Standes) im Erfassungsjahr oder danach erfolgte.
 
Wenn irgendwas nicht erlaubt ist kann man ja ein Constraint erstellen. Dann muss man im Nachhinein gar nicht überprüfen, ob es verbotene Aktionen gab.
 
Tja, manchmal kann man nicht beeinflussen, was die Sachbearbeiter da so machen und muss nachträglich ran.
Ich habe das Problem jetzt mit einer lag()-Funktion lösen können. In einem ersten Schritt vergleiche ich die Bedingung des Satzes mit seinem Nachfolger und prüfe in einem zweiten Schritt, ob bei Änderungen Jahreswechsel vorliegen. Klappt prima und läuft sogar recht schnell.
Trotzdem Dank und Gruß!
 
Werbung:
Zurück
Oben