A abordagem mais simples (e provavelmente mais eficiente) é usar
ROW_NUMBER()
:SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Por diversão, você também pode resolvê-lo dessa maneira no SQL Server 2012. Se
Date
é único:SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Ou mais simplesmente:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Se
Date
não é único, e se você não quer empates (mesma contagem para combinações idênticas de data+código), você precisa usar o mais caro ROWS
, que usa no spool no disco:SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Você pode tentar cada uma dessas opções em sua mesa para ver como é o desempenho.