Hallo,
ich bastle gerade an einer Datenbank, bei der mittels Excel (Daten kommen täglich aus SAP und werden in einer Excel-Tabelle gespeichert, die mit der Datenbank verknüpft ist) in Verbindung mit einer Anfügeabfrage jeden Tag neue Datensätze angefügt werden.
Irgendwann – und zwar dann, wenn sich bestimmte Kriterien geändert haben – sind einzelne Datensätze veraltet und müssen, damit die Tabelle nicht ewig größer wird, gelöscht werden.
Nehmen wir beispielsweise eine Artikeldatenbank, die aus den Feldern Artikelnummer, Filiale und Datum besteht. Der Einfachheit halber gehe ich hier nur von einem einzigen Datensatz aus.
Am 01. Januar wurde mittels der Anfügeabfrage der folgende Datensatz an die Tabelle gehängt.
Artikelnummer : 999
Datum : 01.01.2013
Filiale : 333
Am 02. Januar wird mit einer Anfügeabfrage der folgende Datensatz angefügt :
Artikelnummer : 999
Datum : 02.01.2013
Filiale : 333
Es hat sich also lediglich das Datum geändert.
Mittels einer Abfrage kann somit ermittelt werden, dass sich der Artikel 999 seit zwei Tagen in der Filiale 333 befindet.
Am 03. Januar wird mit der Anfügeabfrage der folgende Datensatz angehängt :
Artikelnummer : 999
Datum : 03.01.2013
Filiale : 444
Da sich jetzt die Filiale geändert hat, und sich der Artikel somit nicht mehr in der Filiale 333 befindet, werden die ersten beiden Datensätze nicht mehr benötigt.
Wie kann ich aus der Tabelle in Abhängigkeit der Änderung eines oder mehrerer Datenfelder, einzelne Datensätze löschen ?
Also irgendwie so : Ermittle den neuestens Datensatz einer Artikelnummer und lösche alle älteren, wenn sich einer der Inhalte der Datenfelder A, B und C (verglichen mit dem neuesten Datensatz) verändert hat.
Vorab schon mal vielen Dank für Tipps in die richtige Richtung und auf diesem Weg noch alles Gute im neuen Jahr.
Grüße,
Ralf26
Hallo,
etwa so:
Delete * From tblDeineTabelle
Where Filiale not In
(Select Top 1 Temp.Filiale From tblDeineTabelle as Temp
Where Temp.Artikel = tblDeineTabelle.Artikel
Order by Temp.Datum Desc)
auf Änderung der Filiale bezogen
Hallo Franz,
dem ist nichts hinzuzufügen, außer dass für Dich die Bezeichnung Access-Gott absolut gerechtfertigt ist.
Ich habe den SQL-Code eins zu eins übernommen. Das Ergebnis ist perfekt.
So ganz verstehe ich den Code nicht, aber da komme ich schon noch dahinter.
Vielen Dank für die schnelle und perfekte Hilfe.
Grüße,
Ralf26
Hallo,
und was ist daran nicht zu vestehen?
Es werden alle DS in der Tabelle gelöscht, bei denen der Filialwert nicht mit dem ersten der nach absteigendem Datum sortierten Datensätze (und damit dem jüngsten Datum zugeordneten Filialwert) übereinstimmen, bezogen auf jeweils eine Artikelnummer(gruppe)
Hallo,
ich hatte bisher Abfragen nur über die Oberfläche von Access gelöst - nie direkt in SQL.
Deshalb gehen mein Kenntnisse hierzu (bis jetzt) gegen null.
Danke,
Ralf
Hallo,
schau Dir einfach öfters mal im Abfrageentwurf die SQL der Abfrage im SQL-Fenster (Ansicht/SQL-Ansicht) an. Dort siehst Du den SQL-String, den Access aus der entworfenen Abfrage gemacht hat.