Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL:Изтриване на всички дублиращи се редове, но запазване на един

Не казахте коя версия използвате, но в SQL 2005 и по-нова версия можете да използвате общ израз на таблица с клаузата OVER. Става малко по следния начин:

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

Играйте с него и вижте какво получавате.

(Редактиране:В опит да бъде полезен, някой редактира ORDER BY клауза в CTE. За да е ясно, можете да поръчате по всичко, което искате тук, не е необходимо да е една от колоните, върнати от cte. Всъщност често срещаният случай на употреба тук е, че "foo, bar" са идентификаторът на групата, а "baz" е някакъв вид времеви печат. За да запазите най-новото, трябва да направите 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. Вмъкнете всички данни от datagridview в базата данни наведнъж

  2. Преобразувайте „smalldatetime“ в „date“ в SQL Server (T-SQL примери)

  3. Как да завъртите динамично с дата като колона

  4. Ключове на SQL сървъра – Други ключове, за които трябва да знаете

  5. Експортиране на данни в SQL Server като INSERT INTO