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
Lücken zwischen Zahlen finden.
Moderator: Moderatoren
Re: Lücken zwischen Zahlen finden.
Vielleicht etwas in dieser Art:
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.
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")
Re: Lücken zwischen Zahlen finden.
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":alle Zahle von 0 bis 9999 erzeugen.
Dann kann man mit der Abfrage "freie Artikelnummern":alle noch freien Artikelnummern "ID_ARTIKEL", die nicht in 0-9999 vorkommen, auflisten lassen.
Beispiel anbei.
Gruß R
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
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" )
Beispiel anbei.
Gruß R
- Dateianhänge
-
- fehlende_Artikelnummern.odb
- (114.49 KiB) 111-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO