Seite 1 von 1

Lücken in fortlaufender Nummerierung finden

Verfasst: Mo 8. Feb 2021, 21:47
von AHo
Hallo allerseits!
Ich habe hier eine kleine relationale Datenbank mit zwei Tabellen: In der einen Tabelle sind meine Schallplatten, in der anderen die Titel auf diesen Schallplatten gelistet. Die Schallplatten sind von 1 bis 999 händisch nummeriert; die Nummer darf sich nicht ändern. Ich habe aber weniger als 999 Schallplatten, weil einige im Laufe der Jahre ausgesondert wurden. Diese etwa hundert habe ich auch aus der Datenbank gelöscht. Nun will ich die fortlaufende Nummerierung bei Neukauf von Platten erst einmal nicht bei 1.000 fortsetzen, sondern die Lücken in der bisherigen Nummerierung, also die Nummern der ausgesonderten Platten, finden und wieder verwenden.
Wie finde ich die Lücken am einfachsten?
Klar - ich könnte die Tabelle nach Calc schubsen und da die Differenz zwischen aktueller und vorhergehender Zeile ausrechnen lassen und bei Werten größer 1 sehe ich dann die Lücke. Aber ich würde das gerne dynamisch in Base tun. Geht das?

Re: Lücken in fortlaufender Nummerierung finden

Verfasst: Di 9. Feb 2021, 11:03
von Wanderer
Hallo,

die übliche Lösung ist wohl ein LEFT JOIN mit einer Tabelle, die alle möglichen Ids - bei Dur 1 bis 1000 enthält.
Manch Datenbanken bieten dafür z.B. SEQUENCE als Struktur an.

Beispielabfrage:
http://www.donkarl.com/?FAQ3.16

Mfg, Jörn

PS: Die Frage habe ich vor nicht allzu langer Zeit schon mal gelesen....
Edit: https://de.openoffice.info/viewtopic.ph ... 61#p291761

Re: Lücken in fortlaufender Nummerierung finden

Verfasst: Di 9. Feb 2021, 17:57
von gogo

Code: Alles auswählen

select * from t_platten p where not exists (select 1 from t_platten e where p.ID_PLATTE = (e.ID_PLATTE - 1))
listet alle Löcher auf:
Angezeigt wird immer der Datensatz der VOR einem Loch kommt. (ID 565 wird angezeigt ==> ID 566 FEHLT)
Wenn mehrere Datensätze hintereinander fehlen wird auch nur der vor dem Loch angezeigt...:
Wenn 5 und 6 fehlen, dann wird der 4er angezeigt.
Nach Neuerfassen des 5ers wird dann der 5er angezeigt, da der 6er noch fehlt...dem