Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Mantenimento del conteggio delle occorrenze

L'approccio più semplice (e probabilmente più efficiente) consiste nell'usare ROW_NUMBER() :

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

Per divertimento, puoi anche risolverlo in questo modo in SQL Server 2012. If Date è unico:

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

O più semplicemente:

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

Se Date non è univoco, e se non vuoi cravatte (stesso conteggio per combinazioni identiche di data+codice), devi usare le più costose ROWS , che utilizza lo spool su disco:

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

Potresti provare ognuna di queste opzioni sul tuo tavolo per vedere come sono le prestazioni.