Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
22
Rozdział1:FunkcjeoknawjęzykuSQL
WHERECicol1=Bicol1+1))ASgrp
FROMdboiT1ASA;
Kwerendatawygenerujenastępującedanewynikowe:
col1
grp
---
---
---
-----
---
---
--
2
3
3
3
11
13
12
13
13
13
27
27
33
35
34
35
35
35
42
42
Ostatniaczęśćrozwiązaniajestdośćprosta.Wzewnętrznejkwerendziegrupujemy
danewedługidentyfikatoragrupyzzaprezentowanejuprzedniokwerendypodrzęd-
nejizwracamyminimalnąorazmaksymalnąwartośćatrybutucol1dlakażdejzgrup
wnastępującysposób:
SELECTMIN(col1)ASstart_range,MAX(col1)ASend_range
FROM(SELECTcol1,
(SELECTMIN(Bicol1)
FROMdboiT1ASB
WHEREBicol1>=Aicol1
ANDNOTEXISTS
(SELECT*
FROMdboiT1ASC
WHERECicol1=Bicol1+1))ASgrp
FROMdboiT1ASA)ASD
GROUPBYgrp;
Rozwiązanietopociągazasobądwazasadniczeproblemy
.Popierwszejegologika
jestmałoczytelna.Podrugiemaonobardzodługiczaswykonania.Niechcęnarazie
zagłębiaćsięwszczegółyplanówwykonaniakwerendy
,ponieważprzyjdziejeszcze
natoczas.Naraziewystarczymiećświadomość,żedlakażdegowierszawtabeli
SQLServerrealizujeniemaldwiepełneoperacjeskanowaniadanych.Wkonsekwen-
cjiprzetworzeniesekwencji10milionówwierszystanowikolosalneprzedsięwzięcie.
Wkolejnymprezentowanymrozwiązaniurównieżbędziemywyznaczaćidentyfika-
torgrupy
,lecztymrazemprzyużyciufunkcjiokna.Rozpoczynamyodwyznaczenia
numerówwierszywoparciuokolejnośćwartościwkolumniecol1przyużyciufunkcji
ROW_NUMBER.FunkcjaROW_NUMBERzostanieszczegółowoomówionawdalszejczę-
ściksiążki,naraziewystarczymiećświadomość,żedlakażdejpartycjigenerujeona
szeregunikatowych,kolejnychliczbcałkowitych(rozpoczynającodliczby1)wopar-
ciuookreślonyporządekwierszy
.