L'approccio più semplice (e probabilmente più efficiente) consiste nell'usare ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Per divertimento, puoi anche risolverlo in questo modo in SQL Server 2012. If Date
è unico:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
O più semplicemente:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Se Date
non è univoco, e se non vuoi cravatte (stesso conteggio per combinazioni identiche di data+codice), devi usare le più costose ROWS
, che utilizza lo spool su disco:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Potresti provare ognuna di queste opzioni sul tuo tavolo per vedere come sono le prestazioni.