Niestety, funkcje okien w SQL Server 2005 nie są wystarczająco wydajne. Rozwiążę to za pomocą skorelowanego podzapytania.
Skorelowane podzapytanie zlicza, ile razy dana osoba kupiła przedmiot w ciągu 14 dni po każdym zakupie (nie licząc pierwszego zakupu).
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
Możesz również umieścić limit czasu w podzapytaniu.
Indeks transactions(personnumber, itemnumber, transactionnumber, itemdate)
może pomóc w szybszym biegu.