Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   mysql - fehlende Nummer bei fortlaufenden Nummern finden (https://www.delphipraxis.net/181607-mysql-fehlende-nummer-bei-fortlaufenden-nummern-finden.html)

baumina 28. Aug 2014 15:23

Datenbank: mySQL • Version: 5.6 • Zugriff über: UniDAC

mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Ich weiß nicht so recht wonach ich suchen soll und ob es so etwas überhaupt als SQL-Befehl gibt.

Ich habe viele Datensätze, die eigentlich in einem Feld fortlaufende Nummern haben sollte, da dem aber nicht so ist, möchte ich die Lücken finden. Sicherlich kann ich mir das mit Delphi als Schleife programmieren. Die Frage ist hier, gäbe es dafür auch einen select-Befehl?

Beispiel:
100400201
100400202
100400203
100400205
100400206
100400208

Müsste mir liefern:
100400204
100400207

jobo 28. Aug 2014 15:53

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
1
Lead Oder Lag liefert Vorgänger/Nachfolger der angegeben Spalte bei vorgegebener Sortierung.
Gibt es leider nicht in mySQL kann aber nachgebildet werden.
2.a
SQL Variablen (Das gibt es m.E. nur bei mySQL, toll!)
damit kann man virtuelle, laufende Reihen erzeugen und z.B. die Differenz zur zu prüfenden Spalte erzeugen
2.b
man kann nur mit der Variable eine virtuelle Tabelle / View bauen und per Outer Join mit der Prüfspalte verbinden, überall wo das Ergebnis (ausgegebene Prüfspalte) Null ist, fehlt was.

p.s.:
Variante 1 zählt auch zu den Window Functions (Analytic Functions) wie z.B. im DB Thread von gestern hier irgendwo.

Olli73 28. Aug 2014 16:37

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Ungetestet:

Code:
select
  zahl + 1 as gesuchteZahl
from
  tabelle
where
  (zahl + 1) not in (select zahl from Tabelle)
Wenn eine Lücke aber aus mehreren Zahlen besteht, wird hier nur die erste angezeigt; da müsste man ggf. noch was tun...

Gruß,
Olli

Jumpy 28. Aug 2014 17:00

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Auch ungetestet, könnte aber die Lücken liefern

Code:
Select
  t.zahl+1 as LueckeVon,
  (Select MIN(zahl)-1 From Tabelle Where zahl>t.zahl) as LueckeBis
From
  tabelle t
Where
  (Select MIN(zahl)-t.zahl From Tabelle Where zahl>t.zahl)>1

himitsu 28. Aug 2014 21:56

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Eine Funktion, welche alle Zahlen von MIN(Zahl) bis MAX(Zahl) prüft, ob sie existieren und die Nichtexistierenden ausgibt.

@Olli73: MAX(Zahl) sollte vielleicht ausgelassen werden, denn das Letzte hat auch keinen Nachfolger.

baumina 29. Aug 2014 06:33

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Danke dass ihr euch meinen Kopf zerbrochen habt! Jumpys Version habe ich nun mal genommen und rumprobiert. So scheint es zu funktionieren:

SQL-Code:
Select
   t.kennung+1 as LueckeVon,
   (Select MIN(kennung)-1 From tblladet where kennung>t.kennung and auid=t.auid and bgid=t.bgid order by kennung) as LueckeBis
 From
   tblladet t
 Where
   auid = 3068 and
   bgid=699 and
   (Select MIN(kennung)-t.kennung From tblladet Where auid=t.auid and bgid=t.bgid and kennung>t.kennung)>1
 order by Kennung

Jumpy 29. Aug 2014 09:18

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Das "Order By Kennung" in der dritten Zeile, also dem ersten Subselect ist mMn überflüssig, sollte aber bei der Query-Ausführung eh ignoriert werden.

baumina 29. Aug 2014 09:27

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden
 
Hab ich weg gemacht, danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz