Der einfachste (und wahrscheinlich effizienteste) Ansatz ist die Verwendung von ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Zum Spaß können Sie es auch in SQL Server 2012 auf diese Weise lösen. Wenn Date
ist einzigartig:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Oder einfacher:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Wenn Date
ist nicht eindeutig, und wenn Sie keine Bindungen wollen (gleiche Anzahl für identische Kombinationen von Datum+Code), müssen Sie die teureren ROWS
verwenden , die auf dem Spool auf der Festplatte verwendet:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Sie können jede dieser Optionen an Ihrem Tisch ausprobieren, um zu sehen, wie die Leistung ist.