Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल एक स्लाइडिंग विंडो के माध्यम से घटनाओं की गिनती रखता है

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 सर्वर 2008 में राइट (टेबल) अनुमति कैसे दें?

  2. संग्रहीत कार्यविधि के परिणामों को पिवट करें?

  3. SQL सर्वर में आपातकालीन मोड से डेटाबेस पुनर्प्राप्त करें

  4. टेबल्स और संग्रहित प्रक्रियाओं का बड़े पैमाने पर नामकरण

  5. SQL सर्वर - क्लस्टर बनाम गैर-संकुल सूचकांक का उपयोग कब करें?