Lücken suchen
Problembeschreibung
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",
das Ergebnis an.
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
;
| Lücke von | Lücke bis |
|---|---|
| 3 | 4 |
| 9 | 12 |
| 16 | 17 |
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.