删除MySQL表中除5个最新条目外的所有条目

ash*_*exm 3 mysql stored-procedures

我目前有PHP代码处理逻辑,因为我不知道如何在SQL中处理它.我想创建一个存储过程,删除除给定config_id的最新行之外的所有行.IE config_id = 5被传递给SP,因此它知道它要清理哪个config_id.

CREATE TABLE  `TAA`.`RunHistory` (
  `id` int(11) NOT NULL auto_increment,
  `start_time` datetime default NULL,
  `stop_time` datetime default NULL,
  `success_lines` int(11) default NULL,
  `error_lines` int(11) default NULL,
  `config_id` int(11) NOT NULL,
  `file_id` int(11) NOT NULL,
  `notes` text NOT NULL,
  `log_file` longblob,
  `save` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

最新的将由start_time确定,如果stop_time为null但不是最新的应删除(如果运行被毫不客气地杀死,则stop_time可以为null).

Lui*_*tti 12

SQL查询:删除表中除最新N之外的所有记录?:

DELETE FROM `runHistory`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `runHistory`
    ORDER BY start_time DESC
    LIMIT 5 
  ) foo
);
Run Code Online (Sandbox Code Playgroud)