Firebird SQL - Abfrageproblem

    • Offizieller Beitrag

    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:

    Spoiler anzeigen

    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:

    Spoiler anzeigen
  • 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.

    • Offizieller Beitrag

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

    Genau genommen: max. 10 Jahre +364 Tage (Beleg 1. Jan) fallend. :P

    Aber hast Recht, es ist richtiger mit dem Belegjahr zu rechnen. Wenn Jahr(HEUTE) - Jahr(Beleg) > 10, dann kann weg.

    • Offizieller Beitrag

    Nach vielem Probieren: GROUP BY war des Pudels Kern.

    Hier die gesamte Lösung:

    Spoiler anzeigen
  • BugFix 6. September 2019 um 10:14

    Hat das Label [ gelöst ] hinzugefügt.