Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL menjaga hitungan kejadian melalui jendela geser

Gunakan opsi dengan CTE , LINTAS BERLAKU operator dan ROW_NUMBER fungsi peringkat

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

Demo di SQLFiddle

Untuk meningkatkan kinerja, gunakan indeks ini

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. bagaimana cara mendapatkan tanggal mulai dan akhir semua minggu antara dua tanggal di server SQL?

  2. Pisahkan talinya. dapatkan nilai pertama dari split SQL Server 2005

  3. Bagaimana cara memberi pemilik basis data (DBO) izin PERAKITAN AKSES EKSTERNAL?

  4. Mengambil gambar dari SQL Server 2008 dan menampilkannya di pengontrol gambar asp.net

  5. Mendapatkan kesalahan aneh, kueri SQL Server menggunakan klausa `DENGAN`