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. INを使用して複数のメタキー/値のペアに基づいてWP投稿を取得する

    2. SQL Server T-SQL関数の使用方法SUM:5つのユースケース

    3. Oracleを使用してテーブル内のXML空タグのダミー値を取得するにはどうすればよいですか?

    4. SQLServerのメッセージ8114「データ型varcharから数値への変換エラー」を修正しました