SQL Bestimmte Anzahl Einträge löschen möglich?

b1gsh0w

Cadet 4th Year
Registriert
Mai 2009
Beiträge
91
Hallo an alle,

ist es möglich, eine bestimmte Anzahl von Einträgen aus einer Tabelle zu löschen, die möglichst nahe an einem bestimmten Datum sein sollen?

Habe hier folgende Tabelle:

LID(PK)..|...Artikel(FK)...|...VerfuegbarAb
.....1......|..........1..........|....2011-05-25
.....2......|..........1..........|....2011-05-25
.....3......|..........1..........|....2011-05-25
.....4......|..........1..........|....2011-05-29
.....5......|..........1..........|....2011-05-29

Es handelt sich also immer um den selben Artikel "1".

Ich möchte nun bspw. genau zwei Einträge löschen, die vor dem 2011-05-30 verfügbar sind. Es kommen ja eig alle 5 Einträge in Frage. Bekomme ich es irgendwie gebacken, dass er mir die zwei Einträge löscht, die am nähsten von dem gewünschten Datum liegen, also die beiden vom 29.05.?
Und kann ich überhaupt die Anzahl festlegen, die gelöscht werden soll?

Wenn alles nicht geht, wie könnte ich es am besten anstellen, um das gewünschte Ergebnis zu erhalten?

Normalerweise gibt man ja Beschränkungen über einen where-clause ein, das funktioniert in dem Fall für mich aber nicht wie gewünscht, da das Programm später nur den Artikel, das Datum und die Anzahl kennt, aber nicht die LID.

Ich stell mir sowas vor wie DELETE <<AnzahlEinträge>> FROM <<Tabelle>> WHERE Artikel = 1 AND VerfuegbarAb <= <<ÜbergebenesDatum>> wobei er mir eben die Einträge löschen soll, die am nähsten vom übergebenen Datum liegen. Funktioniert natürlich nicht, da es nur DELETE FROM heißen kann.

Gruß
 
Zuletzt bearbeitet:
MySQL?

Da ginge sowas in der Art:

DELETE FROM <<Tabelle>> WHERE Artikel = 1 AND VerfuegbarAb <= <<ÜbergebenesDatum>>
ORDER BY VerfuegbarAb DESC LIMIT 3
 
Hi,

mit LIMIT kann man die Anzahl der zurückgegebenen Datensätze eine SELECT-Abfrage festlegen.

Wieso benutzt du nicht einfach deine letzen beiden ID's als Löschschlüssel?

SELECT LID FROM Tabelle WHERE VerfuegbarAb = DATUM LIMIT 3;

Teste mal, was dir die SELECT-Abfrage liefert und poste das mal.

Edit: Zu langsam :)

VG,
Mad
 
Ich arbeite mit HSQLDB.

Der Vorschlag von bu1137 sieht doch ganz logisch aus. Werd ich dann mal ausprobieren. :)

Der Vorschlag hat leider nicht funktioniert, aber mit folgendem Befehl gehts:

DELETE FROM <<Tabelle>> WHERE LID IN (SELECT LID FROM <<Tabelle> WHERE Artikel = 1 AND VerfuegbarAb <= '2011-05-31' ORDER BY VerfuegbarAb DESC LIMIT 50)
 
Zuletzt bearbeitet:
Zurück
Oben