L'approche la plus simple (et probablement la plus efficace) consiste à utiliser ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Pour le plaisir, vous pouvez également le résoudre de cette façon dans SQL Server 2012. Si Date
est unique :
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Ou plus simplement :
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Si Date
n'est pas unique, et si vous ne voulez pas de liens (même nombre pour des combinaisons identiques de date + code), vous devez utiliser le plus cher ROWS
, qui utilise un spool sur disque :
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Vous voudrez peut-être essayer chacune de ces options sur votre table pour voir quelles sont les performances.