Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Giữ số lần xuất hiện

Phương pháp đơn giản nhất (và có lẽ là hiệu quả nhất) là sử dụng ROW_NUMBER() :

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

Để giải trí, bạn cũng có thể giải quyết nó theo cách này trong SQL Server 2012. If Date là duy nhất:

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

Hay đơn giản hơn:

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

Nếu Date không phải là duy nhất và nếu bạn không muốn các mối quan hệ (cùng số lượng cho các kết hợp ngày + mã giống hệt nhau), bạn cần sử dụng ROWS đắt hơn , sử dụng trên bộ đệm trên đĩa:

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

Bạn có thể muốn thử từng tùy chọn này trên bảng của mình để xem hiệu suất như thế nào.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 Full-Text Search (FTS) cực kỳ chậm khi có nhiều hơn một CONTAINSTABLE trong truy vấn

  2. Cập nhật nhiều bảng trong SQL Server bằng INNER JOIN

  3. hành vi lạ của SQL Server khi tính tổng các giá trị của các nút trong XML

  4. Cách lấy số tiếp theo trong một dãy số

  5. Không thể kết nối với AWS EC2 từ studio trực quan (hoặc thực tế ở bất kỳ đâu)