Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL保留MAX和MIN行,删除其余行_Mysql_Sql Delete - Fatal编程技术网

MySQL保留MAX和MIN行,删除其余行

MySQL保留MAX和MIN行,删除其余行,mysql,sql-delete,Mysql,Sql Delete,我有一个在地图上跟踪物体的应用程序。我将对象位置存储在一个表中position。我只想保留找到对象的第一个位置和最后一个位置 我面临的第一个问题是清理现有记录。对于某些对象,我有100个位置。我正在编写以下查询以清理表: DELETE FROM position WHERE object_id = 121 AND `time` NOT IN (SELECT max(`time`) FROM position WHERE object_id = 121) AND `time` NOT IN

我有一个在地图上跟踪物体的应用程序。我将对象位置存储在一个表中
position
。我只想保留找到对象的第一个位置和最后一个位置

我面临的第一个问题是清理现有记录。对于某些对象,我有100个位置。我正在编写以下查询以清理表:

DELETE 
FROM position 
WHERE object_id = 121 
AND `time` NOT IN (SELECT max(`time`) FROM position WHERE object_id = 121)
AND `time` NOT IN (SELECT min(`time`) FROM position WHERE object_id = 121);
但是显然我不能在
DELETE
语句的子查询中使用
position

第二个问题是删除对象的
MAX(time)
记录,然后再插入新记录。在删除最近的记录之前,我需要检查
对象是否有多个位置
,否则我可能会删除最旧的(仅一条)记录

有没有办法优化这个过程?我正在Ubuntu上运行MySQL的最新版本

干杯, 马克西姆这个怎么样

DELETE a 
FROM position a INNER JOIN (SELECT object_id, min(`time`) min_time, max(`time`) max_time FROM position GROUP BY object_id) b ON a.object_id = b.object_id
WHERE a.object_id = 121
AND a.`time` NOT IN (b.min_time, b.max_time)

看起来它正在这样做,在WHERE子句中添加表前缀。我想这甚至可以在对象只有一个位置的情况下工作,因为它得到了最小和最大行。