sql >> Databáze >  >> RDS >> Sqlserver

více transakcí v určitém časovém období omezeném časovým obdobím

Bohužel, funkce okna v SQL Server 2005 prostě nejsou dostatečně výkonné. Vyřešil bych to pomocí korelovaného poddotazu.

Korelovaný dílčí dotaz počítá, kolikrát osoba zakoupila položku během 14 dnů po každém nákupu (a nepočítá se první nákup).

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

Časový limit můžete také vložit do dílčího dotazu.

Index transactions(personnumber, itemnumber, transactionnumber, itemdate) by to mohlo pomoci běžet mnohem rychleji.



  1. Postgres:Můžeme mít sloupec automatického přírůstku ve složeném klíči

  2. Pokus o odstranění z více tabulek pomocí SQL

  3. MS Access volání SQL Server uložená procedura

  4. Obnovte zhmotněné pohledy souběžně