Sql 根据条件删除重复行

Sql 根据条件删除重复行,sql,sql-server,database,Sql,Sql Server,Database,我有一个具有ID和EventDate的表。当我使用两个表的并集时,它有重复的行。现在我得到了具有最小Eventdate的行,并删除了其他重复的行 这张桌子是给我的 身份证日期 -- | -- 1 | 10/27/1993 1 | 10/27/1994 2 | 10/17/1993 2 | 1993年8月15日 根据条件删除重复行您可以使用行编号: 您可以使用行号: 用这个 delete A ( SELECT *,

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

这张桌子是给我的

身份证日期 -- | -- 1 | 10/27/1993 1 | 10/27/1994 2 | 10/17/1993 2 | 1993年8月15日

根据条件删除重复行

您可以使用行编号:

您可以使用行号:

用这个

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

    delete A
    (
       SELECT *,
              RN = ROW_NUMBER() OVER(PARTITION BY [COLUMN] ORDER BY EventDate ASC),*
       FROM dbo.Your_Table
    ) AS A
where rn > 1
就像我们谈论MySQL一样,您不能从表中删除,而在子查询中从同一个表中选择

所以

其中table1是原始表。

就像我们谈论MySQL一样,您不能从表中删除,而从子查询中的同一个表中选择

所以


表1是原始表。

如果我们谈论Firebird,就足够了

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

如果我们谈论火鸟,就足够了

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

请添加一些示例顺便问一下,您使用的是哪种数据库引擎MySQL、Firebird等?顺便问一下,我使用的是sqlserver@venoelI,我认为仅仅使用groupby函数就可以了。请添加一些示例顺便问一下,您使用的是哪种数据库引擎MySQL、Firebird、,等等?顺便说一下,我使用sqlserver@venoelI认为仅仅使用groupby函数workedCTE是不够的from@JohnHC你在说什么;。谢谢你的提醒from@JohnHC你在说什么;。谢谢你的提示,行号有什么帮助?这会删除整个表格我不想基于行号@FabianoCarvalho删除行号有什么帮助?这会删除整个表格我不想基于行号@FabianoCarvalho删除