Helaas zijn de vensterfuncties in SQL Server 2005 gewoon niet krachtig genoeg. Ik zou dit oplossen met een gecorreleerde subquery.
De gecorreleerde subquery telt het aantal keren dat een persoon het artikel binnen 14 dagen na elke aankoop heeft gekocht (en de eerste aankoop niet meegerekend).
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
Misschien wilt u ook de tijdslimiet in de subquery zetten.
Een index op transactions(personnumber, itemnumber, transactionnumber, itemdate)
zou kunnen helpen om dit veel sneller te laten verlopen.