表结构如下
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
;