Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL lưu giữ số lần xuất hiện thông qua một cửa sổ trượt

Sử dụng tùy chọn với CTE , ÁP DỤNG CHÉO CHÉO toán tử và ROW_NUMBER chức năng xếp hạng

 ;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]

Bản trình diễn trên SQLFiddle

Để cải thiện hiệu suất, hãy sử dụng chỉ số này

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. Tham chiếu Các thủ tục được lưu trữ cho tất cả các cơ sở dữ liệu trong máy chủ

  2. FOR XML PATH (''):Bỏ qua các ký tự đặc biệt

  3. Máy chủ Sql:Đếm bản ghi (bao gồm cả 0) mỗi khoảng thời gian mười phút

  4. Khóa ngoại có thể ảnh hưởng đến hiệu suất truy vấn không

  5. Làm thế nào để sử dụng DataContext.ExecuteCommand và nhận giá trị trả về proc được lưu trữ đã thực thi?