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子句中添加表前缀。我想这甚至可以在对象只有一个位置的情况下工作,因为它得到了最小和最大行。