Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Garder le nombre d'occurrences

L'approche la plus simple (et probablement la plus efficace) consiste à utiliser ROW_NUMBER() :

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

Pour le plaisir, vous pouvez également le résoudre de cette façon dans SQL Server 2012. Si Date est unique :

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

Ou plus simplement :

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

Si Date n'est pas unique, et si vous ne voulez pas de liens (même nombre pour des combinaisons identiques de date + code), vous devez utiliser le plus cher ROWS , qui utilise un spool sur disque :

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

Vous voudrez peut-être essayer chacune de ces options sur votre table pour voir quelles sont les performances.