问题的第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倍,则留下其中一个)。