L'OK, ainsi obtenu un peu a ennuyé et a décidé d'ajouter plusieurs centaines de mille rangées à une table.
Pas trop sure de la distribution des valeurs sur la gamme des catégories, transactioncodes et dates, l'a ainsi faite assez même dans toute la gamme des données.
Une demi-douzaine alors essayée de différentes approches, et analysé les données/structures de table.
Assumer l'identité unique était une clé primaire groupée (prétention ouais grande), suggèrent de créer l'index folowwing :
CRÉER L'INDEX de NONCLUSTERED [idx_my_table_trans_cat_id] DESSUS [dbo]. [my_table]
(
[transactioncode] ASC,
[catégorie] ASC,
[unique_id] ASC
)
INCLURE ([date])
AVEC (SORT_IN_TEMPDB = AU LOIN, IGNORE_DUP_KEY = AU LOIN, DROP_EXISTING = AU LOIN, EN LIGNE = AU LOIN)
et puis la question :
; avec cte2 As
(
a.unique_id choisi, a.category, a.date, (minute choisie (unique_id) de c my_table où c.unique_id > a.unique_id) comme next_unique_id
d'a my_table
là où a.transactioncode = « A »
)
choisir *
de cte2 a
intérieur joindre b my_table sur a.next_unique_id = b.unique_id et a.category = b.category et b.transactioncode = « R »
là où datediff (d, a.date, b.date) = 1
semble travailler vraiment bien using l'index de bâche sans retourner aux données brutes…
Mais d'autre part il y a quelques prétentions (selon la signalisation antérieure aussi bien), et vraiment doit être éclairci, bien que, assez heureux avec les résultats donnés ces prétentions jusqu'ici.