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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM