Bohužel, funkce okna v SQL Server 2005 prostě nejsou dostatečně výkonné. Vyřešil bych to pomocí korelovaného poddotazu.
Korelovaný dílčí dotaz počítá, kolikrát osoba zakoupila položku během 14 dnů po každém nákupu (a nepočítá se první nákup).
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
Časový limit můžete také vložit do dílčího dotazu.
Index transactions(personnumber, itemnumber, transactionnumber, itemdate)
by to mohlo pomoci běžet mnohem rychleji.