Doppelte Datensätze löschen
Moin, ich habe ein Tabelle "Material", wo ich alle Doppelten Datensätze löshen möchte. Dabei darf der Datensatz nicht gelöscht werden wenn das Feld "Nummer" mit x,y oder z anfängt. Momentan sind 10000 Einträge in der Datenbank und ich bekomme es nicht so schön hin. Das ist mein Code momentan.
do as server
for i in select Material where Herstellernummer != null do
let h := i.Herstellernummer;
let t := false;
let l := last(select Material where Herstellernummer = h);
let e := first(select Material where Herstellernummer = h);
let a := l.Nummer;
let b := lower(item(split(a, ""), 0));
let ea := e.Nummer;
let eb := lower(item(split(b, ""), 0));
if contains(b, "x") or contains(b, "y") or contains(b, "z") then
if l.Nr != e.Nr then delete e end
else
if contains(eb, "x") or contains(eb, "y") or contains(eb, "z") then
if l.Nr != e.Nr then delete l end
else
if l.Nr != e.Nr then
if number(l.'LetzteÄnderung') > number(e.'LetzteÄnderung') then
delete e
else
if number(l.'LetzteÄnderung') < number(e.'LetzteÄnderung') then
delete l
end
end
end
end
end
end
end
5 Antworten
-
Hallo Lorenz
---
for i select Material do
delete select Material where Herstellernummer=i.Herstellnummer and Nummer=i.Nummer and Nr!=i.Nr and not(contains(xyz,lower(substring(Nummer,0,1))))
end
---
Leo
-
Und welcher von den beiden Datensätzen wird dann gelöscht?
-
der letzte
-
do as server
for i in select Material where cnt(select Material where Herstellernummer = this.Herstellernummer) do
let h := i.Herstellernummer;
let h2 := item(split(h, ""), 0);
if contains(h, "?") = false then
if cnt(select Material where Herstellernummer = h) > 1 then
let t := false;
let l := last(select Material where Herstellernummer = h);
let e := first(select Material where Herstellernummer = h);
let a := l.Nummer;
let b := lower(item(split(a, ""), 0));
let ea := e.Nummer;
let eb := lower(item(split(b, ""), 0));
if contains(b, "x") or contains(b, "y") or contains(b, "z") then
if l.Nr != e.Nr then delete e end
else
if contains(eb, "x") or contains(eb, "y") or contains(eb, "z") then
if l.Nr != e.Nr then delete l end
else
if l.Nr != e.Nr then
if number(l.'LetzteÄnderung') > number(e.'LetzteÄnderung') then
delete e
else
if number(l.'LetzteÄnderung') < number(e.'LetzteÄnderung') then
delete l
end
end
end
end
end
end
end
end
endOkay die Daten werden importiert und dabei auch das Feld letzte Änderung. Und das Feld was älter ist soll gelöscht werden
Hab nur Angst, dass er was falsches löscht. Sollte eigentlich klappen oder?
-
Also, du bist in der Tabelle Hersteller und hast dort die Untertabelle Material und möchtest älter doppelte Einträge löschen, dabei die mit x, y oder z am Anfang der Nummer sollten bleiben. Dann wäre die Formel dazu:
---
for i in Material order by now() - 'Zuletzt geändert am' do
delete Material [Nummer=i.Nummer and Nr!=i.Nr and not(contains("xyz",lower(substring(Nummer,0,1))))
end
---
Mach doch eine Copie der Datenbank und probiere dort.
Leo
Content aside
- vor 4 JahrenZuletzt aktiv
- 5Antworten
- 825Ansichten