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

SQL Holder optælling af forekomster

Den enkleste (og sandsynligvis mest effektive) tilgang er at bruge ROW_NUMBER() :

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

For sjov kan du også løse det på denne måde i SQL Server 2012. Hvis Date er unik:

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

Eller mere enkelt:

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

Hvis Date er ikke unik, og hvis du ikke ønsker bindinger (samme antal for identiske kombinationer af dato+kode), skal du bruge den dyrere ROWS , som bruger på diskens spool:

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

Du vil måske prøve hver af disse muligheder på dit bord for at se, hvordan ydelsen er.



  1. Kan ikke oprette forbindelse til PostgreSQL-server:kunne ikke oprette forbindelse til server:Tilladelse nægtet

  2. Flere Venstre Slut med sum

  3. Ingen resultater efter fjernelse af mysql ft_stopword_file

  4. DSN-fri forbindelse til mysql-server i ms-access husker ikke brugernavn og adgangskode