[SQL] virtualny rezultat zapytania

0

Witam

Mam pewną zagwozdkę. W bazie danych (Interbase) mam tabelę, która służy do ewidencjonowania opisu pewnego obiektu liniowego. Każdy rekord tabeli ma m. in. dwa atrybuty typu FLOAT - 'POCZATEK' i 'KONIEC'. Ponadto są też i inne ... np
ID POCZATEK KONIEC
1 0 100
2 110 150
3 150 215
4 220 220

Dzięki procedurom zapamiętanym zapewniłem sobie że rekordy nie nakładają się na siebie (są wzajemnie rozłączne) pod względem zakresu. Ale teraz interesuje mnie problem tzw. dziur : ) Jak wypisać dziury ?

POCZATEK KONIEC
100 110
215 220

Oraz jak wypisać całościowe zakresy ?

POCZATEK KONIEC
0 100
110 215
220 220

Jeśli ktoś zetknął się z podobnym problemem to z góry dziękuje za wskazówki.

Rozmyślałem na procedurką tworzącą tymczasową tabele do której będą zapisywane np dziury, ale nie umiem sobie z nią poradzić : (

A może procedura pamiętana z cursorem ? Ale nigdy tego nie robilem : (

ANYBODY ? ! ? !

0

Witam

No i nikt mi nie pomógł to sobie sam poradziłem. Znamienny jest fakt że zrobiłem to w pijackim zwidzie : ). Pomyślałem że zamieszcze rezultat mojego toku rozumowania żeby ewentualnie pomógł komuś w przyszłości, i opcjonalnie żeby ktoś mógł go skomentować w stylu: "lepiej zrób tak i tak, albo zastosuj to i tamto".

A więc:

DROP PROCEDURE WYPISZ_CIAGLOSC;
SET TERM ^ ;
CREATE PROCEDURE WYPISZ_CIAGLOSC(L CHAR(2))
RETURNS (POCZ FLOAT, KON FLOAT) AS
DECLARE VARIABLE TPOCZ FLOAT;
DECLARE VARIABLE TKON FLOAT;
DECLARE VARIABLE TMP1 FLOAT;
DECLARE VARIABLE TMP2 FLOAT;
BEGIN
SELECT MIN(POCZATEK) FROM OPERATY WHERE (WARSTWA=:L) INTO :TPOCZ;
FOR SELECT POCZATEK, KONIEC FROM OPERATY WHERE (WARSTWA=:L) ORDER BY POCZATEK, KONIEC
INTO :POCZ, :KON
DO
BEGIN
IF (TPOCZ = POCZ) THEN
TKON = KON;
ELSE
BEGIN
IF (POCZ <> TKON) THEN
BEGIN
TMP1 = POCZ;
POCZ = TPOCZ;
TMP2 = KON;
KON = TKON;
SUSPEND;
TPOCZ = TMP1;
TKON = TMP2;
END
ELSE
TKON = KON;
END
END
POCZ = TPOCZ;
KON = TKON;
SUSPEND;
END^

SET TERM ; ^

No i tak sobie to działa, żeby wypisać dziury, trzeba zmodyfikować procke przez analogie.

Pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1