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

T-SQL:Xóa tất cả các hàng trùng lặp nhưng giữ lại một hàng

Bạn không cho biết bạn đang sử dụng phiên bản nào, nhưng trong SQL 2005 trở lên, bạn có thể sử dụng một biểu thức bảng chung với Mệnh đề OVER. Nó giống như sau:

WITH cte AS (
  SELECT[foo], [bar], 
     row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
  FROM TABLE
)
DELETE cte WHERE [rn] > 1

Chơi với nó và xem bạn nhận được gì.

(Chỉnh sửa:Để tỏ ra hữu ích, ai đó đã chỉnh sửa ORDER BY mệnh đề trong CTE. Để rõ ràng, bạn có thể đặt hàng theo bất kỳ thứ gì bạn muốn ở đây, nó không cần phải là một trong các cột được trả về bởi cte. Trên thực tế, một trường hợp sử dụng phổ biến ở đây là "foo, bar" là định danh nhóm và "baz" là một số loại tem thời gian. Để cập nhật thông tin mới nhất, bạn thực hiện ORDER BY baz desc )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trong SQL Server, làm cách nào để tạo câu lệnh CREATE TABLE cho một bảng nhất định?

  2. Cách thực hiện THAM GIA ANTI SEMI TRÁI trong SQL Server

  3. CEILING () Ví dụ trong SQL Server

  4. Cách thêm nhóm tệp vào cơ sở dữ liệu máy chủ SQL (T-SQL)

  5. SQL Server:Cột thành hàng