Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

più transazioni entro un determinato periodo di tempo, limitato dall'intervallo di date

Purtroppo, le funzioni della finestra in SQL Server 2005 non sono abbastanza potenti. Lo risolverei usando una sottoquery correlata.

La sottoquery correlata conta il numero di volte in cui una persona ha acquistato l'articolo entro 14 giorni da ogni acquisto (e senza contare il primo acquisto).

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

Potresti voler inserire anche il limite di tempo nella sottoquery.

Un indice sulle transactions(personnumber, itemnumber, transactionnumber, itemdate) potrebbe aiutare questo a funzionare molto più velocemente.