sql >> Database >  >> RDS >> Sqlserver

meerdere transacties binnen een bepaalde periode, beperkt door datumbereik

Helaas zijn de vensterfuncties in SQL Server 2005 gewoon niet krachtig genoeg. Ik zou dit oplossen met een gecorreleerde subquery.

De gecorreleerde subquery telt het aantal keren dat een persoon het artikel binnen 14 dagen na elke aankoop heeft gekocht (en de eerste aankoop niet meegerekend).

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

Misschien wilt u ook de tijdslimiet in de subquery zetten.

Een index op transactions(personnumber, itemnumber, transactionnumber, itemdate) zou kunnen helpen om dit veel sneller te laten verlopen.



  1. Exec opgeslagen procedure in dynamische tijdelijke tabel

  2. WHERE NOT BESTAAT in PostgreSQL geeft syntaxisfout

  3. Postgres wordt onmiddellijk afgesloten wanneer gestart met docker-compose

  4. Online schema-upgrade in MySQL Galera-cluster met behulp van de RSU-methode