Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
20
Rozdział1:FunkcjeoknawjęzykuSQL
zademonstrowaniamożliwościfunkcjiokna,zajmęsięnajprostszymwariantem:sek-
wencjąnumerycznązliczbącałkowitą1pełniącąrolęinterwału.Następującykod
służydowygenerowaniaprzykładowychdanychdlategozadania:
SETNOCOUNTON;
USETSQLV5;
IFOBJECT_ID('dboiT1','U')ISNOTNULLDROPTABLEdboiT1;
GO
CREATETABLEdboiT1
(
col1INTNOTNULL
CONSTRAINTPK_T1PRIMARYKEY
);
INSERTINTOdboiT1(col1)
VALUES(2),(3),(11),(12),(13),(27),(33),(34),(35),(42);
GO
Jakwidać,wsekwencjiwkolumniecol1wtabeliT1występująpewneluki.Naszym
zadaniemjestzidentyfikowanieprzedziałówwartości(zwanychrównieżwyspami)
izwróceniepoczątku(start_range)orazkońca(end_range)dlakażdejzwysp.Oto
wynik,jakichcemyosiągnąć:
start_rangeend_range
---
---
---
-----
---
---
--
2
3
11
13
27
27
33
35
42
42
Tegotypuproblempojawiawwielurzeczywistychsystemach.Przykładowewarianty
tegoproblemuwiążąsięzidentyfikowaniem:okresówdostępności,okresówaktyw-
ności(np.sprzedaży),okresów,wktórychspełnionebyłookreślonekryterium(np.
okresów,wktórychwartośćakcjiprzekraczaokreślonąwartośćprogową),zakresów
tablicrejestracyjnychbędącychwużytkuitp.Celowouprościłemprezentowanyprzy-
kładowyproblem,abymócskoncentrowaćsięnasposobiejegorozwiązywania.Meto-
dasłużącadorozwiązaniabardziejzaawansowanychprzypadkówtylkowniewielkim
stopniuróżnisięodmetodysłużącejdorozwiązaniaprostegowariantu.Zachęcam
czytelnikówdopróbysamodzielnegowymyśleniaefektywnegorozwiązaniaopartego
nazbiorachprzedzapoznaniemsięzzademonstrowanymtutajprzykładem.Moż-
narozpocząćodwymyśleniajakiegokolwiekdziałającegorozwiązania,anastępnie
wypełnićtabelęznaczącąliczbąwierszy(powiedzmy10milionów)isprawdzićjego
wydajność.