A APROVAÇÃO, começ assim um bocado furou e decidiu-as adicionar várias centenas mil fileiras a uma tabela.
Não demasiado sure da distribuição dos valores sobre a escala das categorias, transactioncodes e datas, f-la assim consideravelmente mesmo durante todo a escala dos dados.
Meias dúzia então tentadas das aproximações diferentes, e analisado os dados/estruturas da tabela.
Supr a identidade original era uma chave preliminar aglomerada (suposição yeah grande), sugere criar o índice folowwing:
CRIAR O ÍNDICE de NONCLUSTERED [idx_my_table_trans_cat_id] SOBRE [dbo]. [my_table]
(
[transactioncode] ASC,
[categoria] ASC,
[unique_id] ASC
)
INCLUIR ([data])
COM (SORT_IN_TEMPDB = FORA, IGNORE_DUP_KEY = FORA, DROP_EXISTING = FORA, EM LINHA = FORA)
e então a pergunta:
; com cte2 como
(
a.unique_id seleto, a.category, a.date, (minuto seleto (unique_id) de c my_table onde c.unique_id > a.unique_id) como o next_unique_id
da my_table
onde a.transactioncode = “A”
)
selecionar *
de cte2 a
interno juntar-se a b my_table em a.next_unique_id = b.unique_id e a.category = b.category e b.transactioncode = “R”
onde datediff (d, a.date, b.date) = 1
parece trabalhar realmente bem using o índice da coberta sem ir para trás aos dados crus…
Mas por outro lado há algumas suposições (como por a afixação prévia também), e realmente precisa de ser esclarecido, embora, consideravelmente feliz com os resultados dados aquelas suposições até aqui.