近期面試的時候,考官出了一道題,當時沒有做出來。第二天靈光乍現吧,寫出來了,特此記錄一下。
有一張表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 起來,然后取最大值,這樣就不會重復了