Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Prowadzenie liczby wystąpień

Najprostszym (i prawdopodobnie najbardziej wydajnym) podejściem jest użycie ROW_NUMBER() :

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

Dla zabawy możesz to również rozwiązać w ten sposób w SQL Server 2012. Jeśli Date jest wyjątkowy:

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

Lub prościej:

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

Jeśli Date nie jest unikalny, a jeśli nie chcesz remisów (taka sama liczba dla identycznych kombinacji data+kod), musisz użyć droższego ROWS , który używa na buforze na dysku:

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

Możesz wypróbować każdą z tych opcji na swoim stole, aby zobaczyć, jak wygląda wydajność.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj numer miesiąca na funkcję nazwy miesiąca w SQL

  2. Zapytanie programu SQL Server w celu znalezienia wartości CHI-SQUARE (nie działa)

  3. Waga Hamminga/liczba populacji w T-SQL

  4. EXEC do użycia bazy danych

  5. Jak skonfigurować połączenie ADODB z programem SQL Server 2008 w programie Microsoft Access 2010?