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