Desværre er vinduesfunktionerne i SQL Server 2005 bare ikke helt kraftfulde nok. Jeg ville løse dette ved at bruge en korreleret underforespørgsel.
Den korrelerede underforespørgsel tæller antallet af gange, en person har købt varen inden for 14 dage efter hvert køb (og ikke medregnet det første køb).
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
Du vil måske også sætte tidsbegrænsningen i underforespørgslen.
Et indeks over transactions(personnumber, itemnumber, transactionnumber, itemdate)
kan hjælpe med at køre meget hurtigere.