El enfoque más simple (y probablemente el más eficiente) es usar ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Por diversión, también puede resolverlo de esta manera en SQL Server 2012. Si Date
es único:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
O más simplemente:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Si Date
no es único, y si no desea vínculos (el mismo recuento para combinaciones idénticas de fecha+código), debe usar ROWS
, que es más costoso , que utiliza en el carrete en disco:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Es posible que desee probar cada una de estas opciones en su mesa para ver cómo es el rendimiento.