高级重复删除

时间:2018-01-11 00:35:47

标签: mysql

问题的第1部分是here。我现在想删除特定的旧记录。

短篇小说:我们获得了坐标,事件和时间戳。目标是在相同的坐标上删除旧事件。

问题已经证明on rextester

#build dataset 
DROP TABLE IF EXISTS mytable;
CREATE TABLE mytable (id int, EventName varchar(255), x int, y int, z int, Cause varchar(255));
INSERT INTO mytable VALUES
( 1515622543 , 'break' , 334 , 72 , 269 , NULL  ),
( 1515622544 , 'break' , 334 , 72 , 270 , NULL  ),
( 1515622600 , 'break' , 333 , 72 , 269 , NULL  ),
( 1515622601 , 'break' , 333 , 72 , 270 , NULL  ),
( 1515622601 , 'break' , 333 , 73 , 270 , NULL  ),
( 1515622601 , 'break' , 334 , 72 , 268 , NULL  ),
( 1515622953 , 'place' , 334 , 72 , 268 , NULL  ),
( 1515629278 , 'break' , 334 , 72 , 268 , NULL  ),
( 1515629278 , 'place' , 334 , 72 , 268 , NULL  ),
( 1515629480 , 'place' , 333 , 72 , 269 , NULL  ),
( 1515629480 , 'break' , 333 , 72 , 269 , NULL  ),
( 1515629481 , 'place' , 333 , 72 , 269 , NULL  );

DELETE FROM mytable WHERE NOT EXISTS (
    SELECT * FROM (
        SELECT MAX(id) AS id FROM mytable GROUP BY x, y, z
    ) AS keepers
    WHERE keepers.id = mytable.id
);

SELECT * FROM mytable;

可能有数十个重复。旧版本由时间戳标识。问题是,如果在相同的坐标和同一时间有2个事件(甚至10个),则所有事件都将被删除。它应首先删除break个事件,然后离开最新的place事件(如果让我们说最新的地方事件的3倍,则留下其中一个)。

0 个答案:

没有答案