sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Håller räkningen av förekomster

Det enklaste (och förmodligen mest effektiva) tillvägagångssättet är att använda ROW_NUMBER() :

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

För skojs skull kan du också lösa det så här i SQL Server 2012. Om Date är unik:

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

Eller enklare:

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

Om Date är inte unik, och om du inte vill ha kopplingar (samma antal för identiska kombinationer av datum+kod), måste du använda den dyrare ROWS , som använder på disken spool:

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

Du kanske vill prova vart och ett av dessa alternativ på ditt bord för att se hur prestandan ser ut.



  1. PostgreSQL-databasövervakning:Tips för vad du ska övervaka

  2. SQL INSERT...SELECT med automatisk ökning av DATETIME

  3. MySQL .csv-laddning misslyckas på grund av Kan inte lägga till eller uppdatera en underordnad rad:främmande nyckel-begränsning misslyckas

  4. password_verify php matchar inte