最も簡単な (そしておそらく最も効率的な) アプローチは、 ROW_NUMBER()
を使用することです :
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
おもしろいことに、SQL Server 2012 でもこの方法で解決できます。If Date
ユニークです:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
またはもっと簡単に:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
If Date
は一意ではなく、同順位 (日付とコードの同一の組み合わせに対して同じ数) が必要ない場合は、より高価な ROWS
を使用する必要があります 、オンディスク スプールを使用します:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
テーブルでこれらの各オプションを試して、パフォーマンスがどのようなものかを確認してください。