zoukankan      html  css  js  c++  java
  • 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 起来,然后取最大值,这样就不会重复了

  • 相关阅读:
    按键
    bga植球
    数码管
    蜂鸣器
    LED流水灯
    sysTick定时器
    位带
    Android开发
    JavaScript修改src
    JSP笔记
  • 原文地址:https://www.cnblogs.com/theone67/p/12515666.html
Copyright © 2011-2022 走看看