MySQL保留MAX和MIN行并删除其余部分

时间:2014-04-28 04:53:24

标签: 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 (SELECT min(`time`) FROM position WHERE object_id = 121);

但显然我无法在position语句的子查询中使用DELETE表。

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

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

干杯, 马克西姆

1 个答案:

答案 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)