OK, w ten sposób dostawać trochę zanudzać i decydować kilka sto tysięcy rząd stół.
Zbyt pewny dystrybucja wartość nad the pasmo kategoria, transactioncodes i data, w ten sposób zrobić ono ładny wyrównywać przez cały the pasmo dane.
Wtedy próbować pół tuzina różny podejście, i analizować the dane/stołowy struktura.
The unikalny tożsamość być rozgałęźnik początkowy klucz (początkowy duży przypuszczenie), sugerować the folowwing wskaźnik:
TWORZYĆ NONCLUSTERED WSKAŹNIK [idx_my_table_trans_cat_id] DALEJ [dbo]. [my_table]
(
[transactioncode] ASC,
[kategoria] ASC,
[unique_id] ASC
)
ZAWIERAĆ ([data])
Z (SORT_IN_TEMPDB = DALEKO, IGNORE_DUP_KEY = DALEKO, DROP_EXISTING = DALEKO, ONLINE = DALEKO)
i wtedy the zapytanie:
; z cte2
(
wybrany a.unique_id, a.category, a.date, (wybrany minuta (unique_id) od my_table c dokąd c.unique_id > a.unique_id) jako next_unique_id
od my_table a
dokąd a.transactioncode = "A"
)
wybiórka *
od cte2 a
wewnętrzny łączyć my_table B na a.next_unique_id = b.unique_id i a.category = b.category i b.transactioncode = "R"
dokąd datediff (D, a.date, b.date) = (1)
wydawać się naprawdę dobrze using the nakrywkowy wskaźnik bez z powrotem surowy dane…
Ale wtedy tam być tam przypuszczenie (na uprzedni przeniesienie także), i naprawdę potrzebować rozjaśniać rozjaśniać, chociaż, dosyć szczęśliwy z the rezultat dawać tamte przypuszczenie tak daleko.