根据条件删除重复的行

时间:2017-07-05 14:10:58

标签: sql sql-server database

我有一个具有ID和EventDate的表。它有重复的行,因为我使用了两个表的Union。现在我得到了具有最小Eventdate的行并删除了其他重复项。

例如

的表格

ID |日期
--- | ---
1 | 1993年10月27日
1 | 1994年10月27日
2 | 1993年10月17日
2 | 08/15/1993

根据条件删除重复的行

4 个答案:

答案 0 :(得分:2)

您可以使用ROW_NUMBER

;WITH CTE AS
(
   SELECT *,
          RN = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY EventDate)
   FROM dbo.YourTable
)
DELETE FROM CTE
WHERE RN > 1;

答案 1 :(得分:0)

使用它!

    delete A
    (
       SELECT *,
              RN = ROW_NUMBER() OVER(PARTITION BY [COLUMN] ORDER BY EventDate ASC),*
       FROM dbo.Your_Table
    ) AS A
where rn > 1

答案 2 :(得分:0)

作为documentation(如果我们关于MySQL)你不能“从表中删除并从子查询中的同一个表中选择”。

所以

CREATE table1 LIKE table2;
INSERT table2 SELECT * FROM table1; 
DELETE FROM table1
WHERE EXISTS(
  SELECT t2.id FROM table2 t2 WHERE table1.EventDate>t2.EventDate
);
DROP TABLE table2;

table1你原来的表。

答案 3 :(得分:0)

如果我们谈论Firebird就足够了

DELETE FROM table1 t1_1
WHERE EXISTS(
  SELECT t1_2.id FROM table1 t1_2 WHERE t1_1.EventDate>t1_2.EventDate
);