sql >> Databasteknik >  >> RDS >> Sqlserver

flera transaktioner inom en viss tidsperiod, begränsad av datumintervall

Tyvärr är fönsterfunktionerna i SQL Server 2005 helt enkelt inte tillräckligt kraftfulla. Jag skulle lösa detta med en korrelerad underfråga.

Den korrelerade underfrågan räknar antalet gånger som en person köpte varan inom 14 dagar efter varje köp (och inte räknar det första köpet).

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

Du kanske också vill ange tidsgränsen i underfrågan.

Ett index på transactions(personnumber, itemnumber, transactionnumber, itemdate) kan hjälpa detta att gå mycket snabbare.



  1. Mysql-fråga för att hitta hackare som gjorde minst en inlämning varje dag

  2. Hur man exporterar Oracle-frågeresultat till en JSON-fil när du använder SQLcl

  3. Hur man gör en xml-fil från php och mysql

  4. Skapa ett fulltextindex på en vy i SQL Server 2005