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

SQL поддържа броя на срещанията през плъзгащ се прозорец

Използвайте опция с CTE , КРЪСТОСНО ПРИЛАГАНЕ оператор и ROW_NUMBER функция за класиране

 ;WITH cte AS
 (
  SELECT [Date], Code
  FROM dbo.YourTable  
  GROUP BY [Date], Code
  )
  SELECT c.Date, c.Code, o.Occurrences
  FROM cte c 
    CROSS APPLY (
                 SELECT t2.[Date], t2.Code,
                        ROW_NUMBER() OVER(PARTITION BY c.[Date] ORDER BY t2.[Date]) AS Occurrences        
                 FROM dbo.YourTable t2
                 WHERE c.Code = t2.Code
                   AND DATEDIFF(day, t2.[Date], c.[Date]) BETWEEN 0 AND 1
                 ) o
  WHERE c.Code = o.Code AND c.[Date] = o.[Date] 
  ORDER BY c.[Date]

Демо на SQLFiddle

За подобряване на производителността използвайте този индекс

CREATE INDEX x ON dbo.YourTable([Date], Code)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на данни от SQL Server в Salesforce.com

  2. Добавете номер на ред към набор от резултати на SQL заявка

  3. Как да възстановите база данни на SQL Server чрез C# код

  4. Как да увеличим производителността на база данни?

  5. Какво е разширена съхранена процедура в MS SQL Server