AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken mysql - fehlende Nummer bei fortlaufenden Nummern finden
Thema durchsuchen
Ansicht
Themen-Optionen

mysql - fehlende Nummer bei fortlaufenden Nummern finden

Ein Thema von baumina · begonnen am 28. Aug 2014 · letzter Beitrag vom 29. Aug 2014
Antwort Antwort
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#1

mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 28. Aug 2014, 16:23
Datenbank: mySQL • Version: 5.6 • Zugriff über: UniDAC
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
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 28. Aug 2014, 16:53
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#3

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 28. Aug 2014, 17:37
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
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 28. Aug 2014, 18:00
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
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 28. Aug 2014, 22:56
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 29. Aug 2014, 07:33
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
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (29. Aug 2014 um 07:50 Uhr) Grund: SQL nochmal korrigiert
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 29. Aug 2014, 10:18
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: mysql - fehlende Nummer bei fortlaufenden Nummern finden

  Alt 29. Aug 2014, 10:27
Hab ich weg gemacht, danke.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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