Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Contagem de ocorrências


A abordagem mais simples (e provavelmente mais eficiente) é usar ROW_NUMBER() :
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
 FROM dbo.YourTableName
 ORDER BY [Date];

Por diversão, você também pode resolvê-lo dessa maneira no SQL Server 2012. Se Date é único:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
  RANGE UNBOUNDED PRECEDING)
 FROM dbo.YourTable
 ORDER BY [Date];

Ou mais simplesmente:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
 FROM dbo.YourTable
 ORDER BY [Date];

Se Date não é único, e se você não quer empates (mesma contagem para combinações idênticas de data+código), você precisa usar o mais caro ROWS , que usa no spool no disco:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
  ROWS UNBOUNDED PRECEDING)
 FROM dbo.YourTable
 ORDER BY [Date];

Você pode tentar cada uma dessas opções em sua mesa para ver como é o desempenho.