О'КЕЙО, так полученное бит пробурило и решило добавить несколько сто тысяч рядков к таблице.
Слишком конечно распределения значений над рядом категорий, transactioncodes и дат, так сделал его довольно даже повсеместно в ряд данных.
После этого судимая половина по-разному подходов дюжина, и после того как я проанализирована данным/таблице составляет.
Принимать уникально тождественность был связанным главным образом ключом (yeah большим предположением), предлагает создать folowwing индекс:
СОЗДАЙТЕ ИНДЕКС NONCLUSTERED [idx_my_table_trans_cat_id] ДАЛЬШЕ [dbo]. [my_table]
(
[transactioncode] ASC,
[категория] ASC,
[unique_id] ASC
)
ВКЛЮЧИТЕ ([дата])
С (SORT_IN_TEMPDB =, IGNORE_DUP_KEY =, DROP_EXISTING =, ОН-ЛАЙН =)
и после этого вопрос:
; с cte2 как
(
отборное a.unique_id, a.category, a.date, (отборная минута (unique_id) от my_table c где c.unique_id > a.unique_id) как next_unique_id
от my_table a
где a.transactioncode = «a»
)
выберите *
от cte2 a
внутренне соедините my_table b на a.next_unique_id = b.unique_id и a.category = b.category и b.transactioncode = «r»
где datediff (d, a.date, b.date) = 1
кажет, что работать реально наилучшим образом using индекс заволакивания без идти назад к первоначальным данным…
Но с другой стороны будут немного предположений (согласно прежнему оприходование также), и реально нужно быть освобоженным вверх, хотя, довольно счастливо при результаты, котор дали те предположения таким образом далеко.