Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

множество транзакции в рамките на определен период от време, ограничен от период от време

Уви, прозоречните функции в SQL Server 2005 просто не са достатъчно мощни. Бих решил това с помощта на корелирана подзаявка.

Корелираната подзаявка отчита колко пъти дадено лице е закупило артикула в рамките на 14 дни след всяка покупка (без да се брои първата покупка).

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

Може да искате да поставите времевото ограничение и в подзаявката.

Индекс на transactions(personnumber, itemnumber, transactionnumber, itemdate) може да помогне това да работи много по-бързо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между база данни и схема

  2. сортирайте резултатите по колона, а не по ред

  3. Таблица за присъединяване на клиенти и етикети

  4. Съхранената процедура е бавна при извикване от мрежата, бърза от Management Studio

  5. Как да използвате Sum, Avg и Count в Select Statement - SQL Server / TSQL урок, част 128