Impressum   

Lücken suchen

Problembeschreibung

Wenn Sie Lücken in einer Zahlenreihe suchen sollen, hilft Ihnen dieses Script. Stehen z.B. die Zahlen
    1, 2, 5, 6, 7, 8, 13, 14, 15, 18

in der Spalte ID der Tabelle "tabelle1", dann zeigt das Statement
SELECT ifnull(max(a.id), 0)+1 AS "Lücke von",
       b.id-1                 AS "Lücke bis"
  FROM tabelle1 a,
       tabelle1 b
 WHERE a.id < b.id
 GROUP BY b.id
HAVING ifnull(max(a.id), 0)+1 < b.id-1
;
das Ergebnis an.

Lücke vonLücke bis
34
912
1617

Hinweise

Die Funktion "ifnull" hat bei Oracle den Namen "nvl".

Die Funktion "ifnull" benötigt bei Sybase IQ noch einen dritten Parameter, der genutzt wird, wenn der erste Parameter nicht NULL ist, sonst ist das Ergebnis der Funktion NULL.
ifnull(max(a.id), 0)+1 ==> ifnull(max(a.id), 0, max(a.id))+1

Attributtyp Datum

Existiert eine Tabelle, in der ein Datensatz mit einer Ident ID von einem Zeitpunkt datum_von bis zu einem Zeitpunkt datum_bis gültig ist, kann man mit der folgenden Variante die Lücken in den Zeiträumen suchen.

select b.id, max(a.datum_bis), b.datum_von
  from tabelle1 a,
       tabelle1 b
 where a.datum_bis <= b.datum_von
   and a.id         = b.id
 group by b.id,b.datum
having b.datum-max(a.datum) >0

Quelle

Den Originalhinweis habe ich 1998 in einem Oracle-Forum gefunden.