x ältesten Eintrag finden

xrax

Erfahrenes Mitglied
Hallo zusammen,

Bsp.:
Die Tabelle 'Buch' enthält die Felder ISBN und Leihdatum.
Jeder Entleihvorgang wird hier eingetragen.

Ich möchte nun nur die letzten 10 Einträge behalten und die älteren löschen.

Wie bekomme ich nun heraus welches das zehnt älteste Leihdatum zu dieser ISBN ist?

Mir bestem Dank
xrax
 
Moin xrax,

das elft-, zwölf-, dreizehnt- usw alteste Buch mit ISBN "XX" ist sicherlich NICHT in einer nach Aktualität der Ausleihe sortierten Top-Ten-Liste.

Oder DBMS-unspezifisch formuliert im skizzierten Pseudo-Code: Du kannst....

- ein DELETE auf alle Sätze mit der ISBM "XX" machen....
- die NICHT in einem (SELECT Ausleihdatum from Buch where ISBN="XX" Order BY Ausleihdatum DESC ) enthalten sind
- und DBMS-abhängig konnen für die "Top Ten"-Zusatzklausel noch Formulierungen rein wie "LIMIT 10", "TOP 10", "Fetch first 10 Rows Only".

Dazu müsstest du dich mal outen, ob wir denn
- hypothetisch & abstrakt rumphilosophieren -oder-
- ob du vielleicht halbwegs konkrete Bücher
- in einer ganz konkreten Datenbank namens tralalaSQL Version 3.7 oder etwas anderes vorliegen hast.

Grüße
Biber
 
Grundsätzlich eine Select-Abfrage mit absteigender Sortierung auf das Leihdatum(ich nehm mal an, du willst die 10 neusten Einträge behalten und nicht die 10 ältesten).

Annahme: DBMS = MySQL

SQL:
DELETE *
FROM buch
WHERE isbn IN
	(SELECT isbn
	FROM	buch
	ORDER BY leihdatum DESC
	LIMIT 10, 999999999999999999999999);

Je nach DBMS kanns aber auch ganz anders aussehen
 
Zuletzt bearbeitet von einem Moderator:
Moin yaslaw,

da haben wir die Fragestellung ziemlich unterschiedlich interpretiert....

Mit deinem sicherlich fehlerfrei funktionierenden DELETE-Statement knallst du unter Umständen alles weg.... denn du vergleicht doch alle ISBNs dahingehend, ob sie vielleicht mal auch vor längerer Zeit ausgeliehen waren.
Selbst wenn ISBN "XX" ganz frisch gestern ausgeliehen wurde, aber auch am 13.4.1932... dann sind nach deinem DELETE alle Vorkommnisse von Buch "XX" weg (wenn ich keinen Denkfehler mache).

xrax hatte doch fabuliert:
> Wie bekomme ich nun heraus welches das zehnt älteste Leihdatum zu dieser ISBN ist?
Und aus dem "zu dieser ISBN" hätte ich gefolgert, der will von Buch "XX" (maximal) die letzten 10 Ausleihen aufheben, wenn es denn mehr als 10 gäbe, und alle die aus der Regierungszeit von Sissi oder älter löschen.
Aber es darf doch nicht dazu führen, dass auch nur eine einzige ISBN vollständig verschwindet (dann kann ja nicht mal die Frage nach dem letzten Ausleihdatum bzw "Wurde ISBN jemals nachgefragt?" beantwortet werden).


Grüße
Biber
 
Zuletzt bearbeitet:
Hast recht.

So sollte es eher stimmen
SQL:
DELETE *
FROM buch
WHERE (isbn, leihdatum) IN
    (SELECT isbn, leihdatum 
    FROM    buch
    ORDER BY leihdatum DESC
    LIMIT 10, 999999999999999999999999);
 
Zuletzt bearbeitet von einem Moderator:
Moin yaslaw,

ich will nicht pingelig sein, aber... ;-)

Nach Ausführung deines neuen Statements hat die ganze Ausleihhistorie doch nur noch 10 schnuckelige Datensätze....

Meinst du nicht, das xrax im Grunde seines Herzen wollte, dass von jedem einzelnen Buch (bestenfalls) die letzten 10 Entleihungen noch wichtig sind und der Rest den Weg alles Irdischen gehen sollte?

Ich will mal so sagen - wenn xrax nun grad die Uni-Bibliothek in Bremen betreuen würde und plötzlich nur noch die letzten 10 ausgeliehenen Bücher (also die der letzten 3 Minuten) rekonstruiert werden könnten...

... dann hätten wir Bremer eine ziemlich negative Presse... ;-)

Grüße
Biber
 
Besten Dank für Eure Antworten!

Vielleicht ist diese Formulierung besser:

Es sind x ISBNs in der Tabelle.
Ich habe hundert und mehr Einträge pro ISBN, zwischen "lange her" und heute. Ich benötige aber nur die aktuellsten 10 von ISBN 123, die aktuellsten 10 von ISBN 234 usw. Der Rest soll weg.

Es handelt sich um eine MySQL 4.1 DB.

Beste Grüße
xrax
 
Oh Mann, ich hab wirklich Tomaten auf den Augen - du hast Recht!

Je nach Programmiersprache und DBMS muss man es wirklich verschieden lösen.

Nachtrag:
Programmiersprache PHP?
 
Zuletzt bearbeitet:
Fehlt da nicht einfach eine WHERE-Clause nach ISBN?

Nachtrag: Ich würd natürlich noch eine zeitliche Begrenzung reinpacken, das heisst zB es gibt mehr als 10 Einträge UND die älteren Leihen sind älter als 1 Monat.

Nehmen wir mal an, es gibt eine aktuelle Zeitschrift, die jeweils nur für eine halbe Stunde entliehen ist, so könnte diese Zeitschrift in 7 Tagen gut und gerne 50 geliehen worden sein. Hier aber bleibt es interessant, die letzten 7 Tage im Blick zu haben. (Seiten fehlen, vollgeschmiert etc..)

mfg chmee
 
so wäre es ja einfach. Klar kann ich löschen was älter xy ist. Das ist aber nicht die Frage.
Die Buch-Tabelle ist übrigends nur ein simples Beispiel das meine Problemstellung in meinem aktuellen Projekt einfacher darstellt.
 

Neue Beiträge

Zurück