Löschabfrage SQL mit Vergleich innerhalb der Tbl

Hallo SQL-Experten,
ich habe eine Tabelle tblbdeall. In dieser gibt es die Felder ID (Schlüssel), Personalnummer (Double), Meldedatum, Meldezeit (beides als Datum/Zeit).
Die Tabelle habe ich aufsteigend nach Personalnummer, Datum und Zeit sortiert. Jetzt möchte ich untersuchen, ob die Personalnummer in Zeile 1 mit der in Zeile 2 gleich ist. Ist das der Fall, soll geprüft werden, ob das Meldedatum der beiden Zeilen gleich ist. Ist das auch der Fall, soll geprüft werden, ob die Zeitdifferenz der beiden Zeilen weniger als 61 Sekunden beträgt. Ist dies auch der Fall, soll die erste Zeile gelöscht werden.
Das ganz soll von vorne beginnen, wobei die Zeile 2 nun als Vergleichsmaßstab gelten soll. Meine kläglichen Versuche sehen so aus, aber es geht nicht. Weiss jemand von euch Rat?

DELETE
FROM tblbdeall, tblbdeall AS tblbdeall_1
WHERE EXISTS
(SELECT tblbdeall_1.ID
FROM tblbdeall_1
WHERE tblbdeall.Personalnummer = tblbdeall_1.Personalnummer
AND (tblbdeall.Meldedatum + tblbdeall.Meldezeit - tblbdeall_1.Meldedatum - tblbdeall_1.Meldezeit)

Servus Mo,

da haste uns ja einen reingeknallt *KopfQualm* …

Das folgende Statement hat in meinem Test gemacht was du willst,
"lösch mich wenn es einen gibt der >61 sec. älter ist als ich’:

DELETE
FROM tblbdeall t1
WHERE EXISTS (SELECT *
FROM tblbdeall t2
WHERE t2.personalnummer = t1.personalnummer
AND t2.meldedatum = t1.meldedatum
AND t2.meldezeit > t1.meldezeit + 61 seconds)

Lass mal hören ob es geholfen hat.

Viel Erfolg,
SomeOne

@Mod: kann man nicht eine Formatierungsmögichkeit einführen bitte ?
In Courier (o.ä.) stünde untereinander was untereinander gehört, dann wäre das Statement weit besser lesbar

HI Someone,
bekomme ich ab der EXIXTS Anweisung ne Syntax-Error.
…willst du mal einen Auszug aus der mdb haben?

Gruß
Mo

Hallo Mo,

auf dem Heimweg ist mir eingefallen dass mein Lösungsvorschlag einen logischen Fehler hat.
Glücklicherweise hast du den Syntax-Error bekommen …

Richtig muss es heissen

DELETE
FROM tblbdeall t1
WHERE EXISTS (SELECT *
______________FROM tblbdeall t2
______________WHERE t2.personalnummer = t1.personalnummer
______________AND t2.meldedatum = t1.meldedatum
______________AND t2.meldezeit > t1.meldezeit
______________AND t2.meldezeit

Hi Mo,

evtl liegt der Syntax Error daran dass ich geschrieben habe
„tblbdeall t1“ , deine DB aber gerne „tblbdeall AS t1“ hätte ?

Das selbe für „tblbdeall AS t2“ natürlich …

Sorry, war ich von meiner DB so gewohnt

Gruss,
SomeOne

Hi Someone,
deine zweite Version läuft, jedoch hab ich dabei massive Performance-Probs. Werde die Tabelle in 100k Pakete teilen und dann sollte es gehen. Vielen Dank für die Hilfe!

SQL Index
Hallo Maurice,

puuuh, da bin ich ja froh dass das Statement funzt :smile:)) .

Die Performance-Probs kannst du evtl. mit einem Index mildern,
bitte erstelle einen Index auf die Spalten

personalnummer/meldedatum/meldezeit

und lass das Statement dann nochmals laufen.

Das sollte einen ordentlichen Performance-Schub bringen.

Viel Erfolg,
SomeOne