Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

plusieurs transactions au cours d'une certaine période, limitée par une plage de dates

Hélas, les fonctions de fenêtre dans SQL Server 2005 ne sont tout simplement pas assez puissantes. Je résoudrais cela en utilisant une sous-requête corrélée.

La sous-requête corrélée compte le nombre de fois qu'une personne a acheté l'article dans les 14 jours suivant chaque achat (et sans compter le premier achat).

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

Vous pouvez également mettre la limite de temps dans la sous-requête.

Un index sur les transactions(personnumber, itemnumber, transactionnumber, itemdate) pourrait aider cela à fonctionner beaucoup plus rapidement.