Най-простият (и вероятно най-ефективният) подход е да използвате ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
За забавление можете също да го решите по този начин в SQL Server 2012. Ако Date
е уникален:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Или по-просто:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Ако Date
не е уникален и ако не искате равенства (еднакъв брой за еднакви комбинации от дата+код), трябва да използвате по-скъпия ROWS
, който използва на диска спула:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Може да опитате всяка от тези опции на вашата маса, за да видите каква е ефективността.