Freie Nummer in SQL Datenbank finden

2 Antworten

Ich bin mir nicht sicher ob ich Dein Datenmodell korrekt verstanden habe, vielleicht müsstest Du das noch etwas genauer beschreiben. Aber ich würde als ersten Ansatz mal folgendes probieren:

SELECT unterartikelnummer FROM artikelstamm WHERE artikelnummer = myartikelnummer AND beschreibung = mybeschreibung AND unterartikelnummer > my_unterartikelnummer AND rownum <= 1 ORDER BY unterartikelnummer ASC;


grunz 
Beitragsersteller
 04.01.2010, 16:38

Der Ansatz ist nicht schlecht, aber so bekomme ich ja nur die tieferen Artikelnummern. ok, ich seh gerade die beschreibung ist blöd, darum hier die richtige Fragestelltung. Also ich hab artikelnummern mit unternummern:

Artikel: 100-0 Artikel: 100-2 Artikel: 100-3

jetzt möchte ich mit einer Abfrage die neue "unterartikelnummer" herausfinden, in dem Fall als erstes die 1 also 100-1 und als nächstes aber auch die 100-4.

Hoffe ich konnte es halbwegs verständlich rüber bringen ;-)

Viele Grüße und danke schon jetzt für jede Antwort!!!!! Thomas

0
maxbreak  04.01.2010, 19:15
@grunz

Ach so, Du willst praktisch die Lücken finden. Warum eigentlich? Ist bereits schon mal erörtert worden: http://www.spotlight-wissen.de/archiv/message/816742.html Eine andere Möglichkeit wäre vielleicht noch eine Funktion zu schreiben in der Du alle Artikel mit der Artikelnummer liest (in einem Cursor) und bei der ersten Lücke abbrichst. Die so gefundene Lücke wäre dann die nächste Unterartikelnummer. Ist aber vermutlich mit etwas Programmieraufwand verbunden.

0

Das geht z.B. mit einem verschachtelten select (subselect):

select nummer + 1 from tabelle where nummer + 1 not in (select nummer from tabelle)

mit nummer + 1 findest du von jeder vorhandenen Nummer die nächstfolgende und erreichst damit auch Lücken. Da sind neben Lücken natürlich auch besetzte dabei. Mit dem subselect blendest du die besetzten weg, sodass nur die freien Nrn übrigbleiben.

Nur die erste freie Nummer bekommst Du mit dieser Abfrage:

select min(nummer + 1) from tabelle where nummer + 1 not in (select nummer from tabelle)

Mit min oder analog max bekommst Du nur die erste bzw. die letzte freie Nummer.

Diese Abfragen habe ich eben ausprobiert.


wotan38  14.03.2010, 11:47

Ergänzend dazu: Wenn Du nur innerhalb eines Bereiches die nächste freie Nummer finden willst, kannst natürlich zusätzliche Einschränkungen hinzufügen wie and between num-1 and num-2. Es ist bei Deiner Angabe nicht klar, ob die Unternummern extra sind oder nur Bestandteil einer durchgängigen Nummerierung.

0