我有一个在地图上跟踪对象的应用程序。我将对象位置存储在表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);
但显然我无法在position
语句的子查询中使用DELETE
表。
我的第二个问题是在插入新对象之前删除对象的MAX(time)
记录。我需要先检查object
之前是否有多个位置才能删除最近的位置,否则我可能会删除最旧的(唯一的)记录。
有没有办法优化这个过程?我在Ubuntu上运行MySQL最新版本。
干杯, 马克西姆
答案 0 :(得分:1)
这个怎么样?
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)