Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

várias transações dentro de um determinado período de tempo, limitado por intervalo de datas


Infelizmente, as funções de janela no SQL Server 2005 não são suficientemente poderosas. Eu resolveria isso usando uma subconsulta correlacionada.

A subconsulta correlacionada conta o número de vezes que uma pessoa comprou o item dentro de 14 dias após cada compra (sem contar a primeira compra).
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

Você também pode querer colocar o limite de tempo na subconsulta.

Um índice em transactions(personnumber, itemnumber, transactionnumber, itemdate) pode ajudar isso a correr muito mais rápido.