O.K., werd zo een beetje bored en beslist honderdduizenden rijen aan een lijst toe te voegen.
Niet te zeker van distributie van waarden over de waaier van categorieën, transactioncodes en data, maakte het zo vrij zelfs door de waaier van gegevens.
Dan geprobeerd een half dozijn verschillende benaderingen, en geanalyseerd de gegevens/de lijststructuren.
Het veronderstellen van de unieke identiteit was een gegroepeerde primaire sleutel (ja grote veronderstelling), voorstelt creërend de folowwing index:
CRE�ëR INDEX NONCLUSTERED [idx_my_table_trans_cat_id] [dbo]. [my_table]
(
[transactioncode] ASC,
[categorie] ASC,
[unique_id] ASC
)
OMVAT ([datum])
MET (SORT_IN_TEMPDB = WEG, IGNORE_DUP_KEY = WEG, DROP_EXISTING = WEG, ONLINE = WEG)
en toen de vraag:
; met cte2 zoals
(
selecteer a.unique_id, a.category, a.date, (uitgezocht min (unique_id) van my_table c waar c.unique_id > a.unique_id) als next_unique_id
van my_table a
waar a.transactioncode = 'a'
)
selecteer *
van cte2 a
binnen sluit me aan bij my_table B op a.next_unique_id = b.unique_id en a.category = b.category en b.transactioncode = „R“
waar datediff (D, a.date, b.date) = 1
schijnt te werken werkelijk goed gebruikend de behandelende index zonder het terugkeren naar ruwe gegevens…
Maar anderzijds zijn er een paar veronderstellingen (vanaf het vroegere posten eveneens), en moet werkelijk verklaarde, niettemin, vrij gelukkig met de resultaten zijn tot zover gegeven die veronderstellingen.