Lücken zwischen Zahlen finden.

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Buck_r
*
Beiträge: 16
Registriert: Mi, 13.01.2016 15:12

Lücken zwischen Zahlen finden.

Beitrag von Buck_r »

Hallo zusammen,
ich bräuchte einen Denkanstoß zum finden von Zahlenlücken per SQL Anfrage.

Zum Beispiel stehen Artikelnummern in einer Tabelle in der Spalte "Art.Nr:" als Feldtyp "Dezimal [DECIMAL]"

Art.Nr:
1
2
3
7
8
9
12
13
Nun habe ich eine Lücke zwischen 3 bis 7 und 9 bis 12 was bedeutet das die zahlen 4 5 6 und 10 11 zu Verfügung stehen.
Ist das möglich per SQL herauszusuchen?

ich verwende Libre Base als Frontend
und MySQL als Backend
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Lücken zwischen Zahlen finden.

Beitrag von RobertG »

Vielleicht etwas in dieser Art:

Code: Alles auswählen

SELECT "ID"+1 "ID_fehlt" FROM "Age" WHERE "ID"+1 NOT IN (SELECT "ID" FROM "Age") AND "ID" < (SELECT MAX("ID") FROM "Age")
UNION
SELECT "ID"+2 "ID_fehlt" FROM "Age" WHERE "ID"+2 NOT IN (SELECT "ID" FROM "Age") AND "ID"+1 < (SELECT MAX("ID") FROM "Age")
Das habe ich jetzt gerade für eine Tabelle "Age" und das Feld "ID" ausprobiert. Musst Du natürlich anpassen und wegen des Union-Befehls über direkten SQL-Modus laufen lassen. Das findet so Einzellücken und zwei aufeinanderfolgende. Und je mehr Du untereinander packst (mit Union verbunden, Zähler entsprechend erhöht), desto mehr Zahlen tauchen auf. Aber Achtung: Abfragen mit IN(...) werden immer langsamer, je größer der Umfang an Daten ist.
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Lücken zwischen Zahlen finden.

Beitrag von F3K Total »

Hallo,
ich habe da noch einen anderen Vorschlag. Mit einer kleinen Tabelle T_Z, in der nur die Nummern 0 bis 9 stehen, kann man z.B. über diese Ansicht "vZ":

Code: Alles auswählen

SELECT A.Z + 10*B.Z + 100*C.Z + 1000*D.Z  AS Z FROM "T_Z" A, "T_Z" B, "T_Z" C, "T_Z" D ORDER BY Z asc
alle Zahle von 0 bis 9999 erzeugen.
Dann kann man mit der Abfrage "freie Artikelnummern":

Code: Alles auswählen

SELECT "vZ"."Z", 'Diese Nummer ist noch frei' AS "TEXT" FROM "vZ" WHERE "vZ"."Z" NOT IN ( SELECT "ID_ARTIKEL" FROM "T_ARTIKELNUMMERN" )
alle noch freien Artikelnummern "ID_ARTIKEL", die nicht in 0-9999 vorkommen, auflisten lassen.
Beispiel anbei.
Gruß R
Dateianhänge
fehlende_Artikelnummern.odb
(114.49 KiB) 111-mal heruntergeladen
Antworten