我有一个具有ID和EventDate的表。它有重复的行,因为我使用了两个表的Union。现在我得到了具有最小Eventdate的行并删除了其他重复项。
例如
的表格 ID |日期
--- | ---
1 | 1993年10月27日
1 | 1994年10月27日
2 | 1993年10月17日
2 | 08/15/1993
根据条件删除重复的行
答案 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
);