近期面试的时候,考官出了一道题,当时没有做出来。第二天灵光乍现吧,写出来了,特此记录一下。
代码语言:javascript复制有一张表t,三个字段,自增id,name,update_time,删除name重复的行,保留update_time最大的那一条,只保留一条
DELETE
FROM
t
WHERE
t.`name` IN (
SELECT
t.`name`
FROM
(SELECT * FROM t) t
GROUP BY
t.`name`
HAVING
count(1) > 1
)
AND t.id NOT IN (
SELECT
substring_index(max(t.new_u_time), ',', - 1)
FROM
(
SELECT
t.id,
t.`name`,
t.update_time,
CONCAT(t.update_time, ',', t.id) new_u_time
FROM
t
) t
GROUP BY
t.`name`
HAVING
count(1) > 1
)
说明:如果是随便删除,保留一行,那大家应该都会,这里就是可能会出现update_time重复的情况,所以需要update_time和id concat 起来,然后取最大值,这样就不会重复了