Hélas, les fonctions de fenêtre dans SQL Server 2005 ne sont tout simplement pas assez puissantes. Je résoudrais cela en utilisant une sous-requête corrélée.
La sous-requête corrélée compte le nombre de fois qu'une personne a acheté l'article dans les 14 jours suivant chaque achat (et sans compter le premier achat).
select t.*
from (select t.*,
(select count(*)
from t t2
where t2.personnumber = t.personnumber and
t2.itemnumber = t.itemnumber and
t2.transactionnumber <> t.transactionnumber and
t2.transactiondate >= t.transactiondate and
t2.transactiondate < DATEADD(day, 14, t.transactiondate
) NumWithin14Days
from transactions t
where transactionDate between '2001-01-01' and '2001-03-01'
) t
where NumWithin14Days > 0
Vous pouvez également mettre la limite de temps dans la sous-requête.
Un index sur les transactions(personnumber, itemnumber, transactionnumber, itemdate)
pourrait aider cela à fonctionner beaucoup plus rapidement.