ncca 2023-07-24 18:37 采纳率: 0%
浏览 29

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

 

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

  • 写回答

1条回答 默认 最新

  • 张六十zhangliushi CSDN实力新星 2023-07-24 18:59
    关注
    -- 可以使用开窗函数处理,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
    ;
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 7月24日
  • 创建了问题 7月24日