天天看點

sql 删除重複的資料,保留一條,并且保留update_time最大的那條

近期面試的時候,考官出了一道題,當時沒有做出來。第二天靈光乍現吧,寫出來了,特此記錄一下。

有一張表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 起來,然後取最大值,這樣就不會重複了