Det enklaste (och förmodligen mest effektiva) tillvägagångssättet är att använda ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
För skojs skull kan du också lösa det så här i SQL Server 2012. Om Date
är unik:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Eller enklare:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Om Date
är inte unik, och om du inte vill ha kopplingar (samma antal för identiska kombinationer av datum+kod), måste du använda den dyrare ROWS
, som använder på disken spool:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Du kanske vill prova vart och ett av dessa alternativ på ditt bord för att se hur prestandan ser ut.