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

Hinweis

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

Attributtyp Datum

Existiert eine Tabelle, in der eine 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.