sql >> Database >  >> RDS >> Sqlserver

SQL Bijhouden van voorvallen

De eenvoudigste (en waarschijnlijk meest efficiënte) benadering is het gebruik van ROW_NUMBER() :

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

Voor de lol kun je het ook op deze manier oplossen in SQL Server 2012. Als Date is uniek:

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

Of eenvoudiger:

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

Als Date is niet uniek, en als je geen banden wilt (hetzelfde aantal voor identieke combinaties van datum+code), moet je de duurdere ROWS gebruiken , die op de spool op de schijf gebruikt:

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

U kunt elk van deze opties op uw tafel proberen om te zien hoe de uitvoering is.



  1. CSV importeren naar MySQL

  2. Speciale tekens toestaan ​​SQL Server 2008

  3. Probleem met MySQL-verbindingstime-out - Grails-toepassing op Tomcat met Hibernate en ORM

  4. Op welke kolom moet de geclusterde index worden geplaatst?