mysql删除重复记录保留最早和最晚时间的问题

表结构如下

time是每条记录插入的时间,理论上是不重复的

name是用户名 但每个用户可能有多张卡即cardno

现在想去掉name和cardno两个字段重复的记录,并且保留最早time的那一条

time.                                  name.          cardno   id

2023-12-4 2:00:00.          tom             1793      4

2023-12-3 2:00:00.          tom             1792       3

2023-12-2 2:00:00.          tom             1793     2

2023-12-1 2:00:00.          rose            1793      1

 

这个数据有几十万条,用什么方法会比较快?

-- 可以使用开窗函数处理,name和cardno相同为一组,按time降序排列编号,取排第一位的time
SELECT
    time
   ,name
   ,cardno
   ,id
FROM
(
    SELECT
        time
       ,name
       ,cardno
       ,id
       ,ROW_NUMBER() OVER(PARTITION BY name,cardno ORDER BY time)    AS rn
    FROM 表名
) t1
WHERE rn = 1
;