sql >> Base de Datos >  >> RDS >> Sqlserver

múltiples transacciones dentro de un cierto período de tiempo, limitadas por rango de fechas

Por desgracia, las funciones de ventana en SQL Server 2005 simplemente no son lo suficientemente poderosas. Resolvería esto usando una subconsulta correlacionada.

La subconsulta correlacionada cuenta la cantidad de veces que una persona compró el artículo dentro de los 14 días posteriores a cada compra (sin contar la primera 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

Es posible que también desee poner el límite de tiempo en la subconsulta.

Un índice de transactions(personnumber, itemnumber, transactionnumber, itemdate) podría ayudar a que esto funcione mucho más rápido.