sql >> Databáze >  >> RDS >> Sqlserver

SQL Vedení počtu výskytů

Nejjednodušší (a pravděpodobně nejúčinnější) přístup je použít ROW_NUMBER() :

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

Pro zábavu to můžete také vyřešit tímto způsobem v SQL Server 2012. Pokud Date je unikátní:

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

Nebo jednodušeji:

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

Pokud Date není unikátní, a pokud nechcete vazby (stejný počet pro identické kombinace datum+kód), musíte použít dražší ROWS , který používá on-disk spool:

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

Možná budete chtít vyzkoušet každou z těchto možností na vašem stole, abyste viděli, jaký je výkon.



  1. Klauzule OUTPUT v MySQL

  2. Vytváří SQL Server ve výchozím nastavení neklasifikovaný index ve všech sloupcích tabulky

  3. Jak zobrazit indexy pro databázi nebo tabulku v MySQL?

  4. Jak se dotazovat na UUID pro postgres