删除重复记录 Firebird SQL

Delete duplicated records Firebird SQL

我想删除重复的行,所以我使用这个 select 语句来查找所有重复的行。

SELECT * FROM MY_CARD T1
INNER JOIN( SELECT IDCARD, YEAR FROM MYCARD GROUP BY IDCARD, YEAR HAVING COUNT(IDCARD) > 1 ) T2 ON T1.IDCARD = T2.IDCARD AND T1.YEAR=T2.YEAR
WHERE T1.IDRODZ = 5 AND IDCARD=80;

我的结果看起来是这样,但这只是一个简短的例子,有更多重复的记录。

 ID   IDCARD    YEAR IDRODZ
 1     80   2014    5
 2     80   2014    5
 3     80   2014    5
 4     80   2015    5
 5     80   2015    5
 6     80   2015    5

我需要 delete 语句,它可以帮助我删除重复的值,这样我的 table 就可以像这样:

 id  IDCARD   YEAR  IDRODZ
  1  80        2014      5
  4  80        2015      5

如何实现?

因为你有一个唯一的 ID,你可以这样做:

delete from my_card
where id not in (select min(id)
                 from my_card
                 group by idcard, year);

这将为每个 (idcard, year) 组合保留具有最小 ID 的行。如果你想保留最大的id,在sub-select.

中使用max(id)

在线示例:http://rextester.com/WXTU26543