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