Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

mehrere Transaktionen innerhalb eines bestimmten Zeitraums, begrenzt durch den Datumsbereich

Leider sind die Fensterfunktionen in SQL Server 2005 einfach nicht leistungsfähig genug. Ich würde dies mit einer korrelierten Unterabfrage lösen.

Die korrelierte Unterabfrage zählt, wie oft eine Person den Artikel innerhalb von 14 Tagen nach jedem Kauf gekauft hat (und den ersten Kauf nicht mitgerechnet).

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

Möglicherweise möchten Sie das Zeitlimit auch in die Unterabfrage einfügen.

Ein Index für transactions(personnumber, itemnumber, transactionnumber, itemdate) könnte dazu beitragen, dass dies viel schneller ausgeführt wird.