Firebird SQL - Abfrageproblem

  • Hi,

    ich möchte Routinen erstellen um (gemäß DSGVO) Datensätze, die die Aufbewahrungsfrist überschritten haben zu löschen/anonymisieren.

    Die längsten Fristen gelten für Rechnungen (10 Jahre), d.h. alle zugehörigen Kundendaten müssen ebenso lange aufbewahrt werden. Ist die letzte Kundenaktivität (Verkaufsrechnung) länger als 10 Jahre her, müssen alle Kundendaten gelöscht oder anonymisiert werden.

    Soweit, so sinnlos aufwändig. <X

    Mein Lösungsansatz war folgender:

    - alle Kundennummern mit Status "nicht mehr aktiv" abfragen

    - in der Belegtabelle die jüngste Verkaufsrechnung ( MAX(Belegnr) ) für jede dieser Kundennummern ermitteln

    - feststellen, ob Differenz größer als 119 Monate (min. 120 Monate, also 10 Jahre)

    - JA - Adressnummer ausgeben

    - NEIN - 0 ausgeben

    - mit den Adressnummern dann die erforderlichen UPDATE-Statements durchführen


    Für eine vorhandene Rechnungsnummer klappt die Ermittlung gut:

    Mein Problem ist aber, für die Liste der inaktiven Kunden die jeweils jüngste Rechnungsnummer abzufragen, da ich dafür MAX() benutze und diese Funktion ja nur einen Wert zurückliefert. Hier brauchte ich eine Möglichkeit in einer Schleife oder ähnlich zu arbeiten. Ich bin nicht so superfit mit SQL und kenne nicht alle Tricks, vielleicht kann mir jemand einen Tipp geben.

    Der Vollständigkeit halber, die Ermittlung der inaktiven Kunden und die MAX-Beleg Ermittlung:

  • Hallo BugFix,

    ist zwar keine Antwort zu Deiner Frage aber zur Aufbewahrungsfrist:


    Beginn der Aufbewahrungsfrist ist jeweils das Ende des Kalenderjahres, in welchem Änderungen oder Neuanlagen der Unterlagen erfolgten.


    Also muss man Belege eigentlich 11 Jahre aufbewahren. Nur der guten Ordnung halber.

  • Nach vielem Probieren: GROUP BY war des Pudels Kern.

    Hier die gesamte Lösung:

  • BugFix

    Hat das Label [ gelöst ] hinzugefügt