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 起来,然后取最大值,这样就不会重复了

原文地址:https://www.cnblogs.com/theone67/p/12515666.html