sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Mantener la cuenta de las ocurrencias

El enfoque más simple (y probablemente el más eficiente) es usar ROW_NUMBER() :

SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
 FROM dbo.YourTableName
 ORDER BY [Date];

Por diversión, también puede resolverlo de esta manera en SQL Server 2012. Si Date es único:

SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
  RANGE UNBOUNDED PRECEDING)
 FROM dbo.YourTable
 ORDER BY [Date];

O más simplemente:

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

Si Date no es único, y si no desea vínculos (el mismo recuento para combinaciones idénticas de fecha+código), debe usar ROWS, que es más costoso , que utiliza en el carrete en disco:

SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
  ROWS UNBOUNDED PRECEDING)
 FROM dbo.YourTable
 ORDER BY [Date];

Es posible que desee probar cada una de estas opciones en su mesa para ver cómo es el rendimiento.