Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

wiele transakcji w określonym przedziale czasowym, ograniczonym zakresem dat

Niestety, funkcje okien w SQL Server 2005 nie są wystarczająco wydajne. Rozwiążę to za pomocą skorelowanego podzapytania.

Skorelowane podzapytanie zlicza, ile razy dana osoba kupiła przedmiot w ciągu 14 dni po każdym zakupie (nie licząc pierwszego zakupu).

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

Możesz również umieścić limit czasu w podzapytaniu.

Indeks transactions(personnumber, itemnumber, transactionnumber, itemdate) może pomóc w szybszym biegu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Visual Studio:ContextSwitchDeadlock

  2. Grupowanie SQL - Pokaż tylko 5 komentarzy na post

  3. Jak działa OBJECTPROPERTY() w SQL Server

  4. Aktywność zadania programu SQL Server (zadanie nie powiodło się, ale rekordy historii w działaniu zadania nadal wykazują stan „uruchomiony”)

  5. Jeśli nie istnieje, nie działa w SQL CE