2014-04-28 53 views
2

我有一個應用程序正在跟蹤地圖上的對象。我將對象位置存儲在表position中。我只想保留第一個位置,我找到了對象和最後一個位置。MySQL保留MAX和MIN行並刪除其餘的

我面臨的第一個問題是清理現有記錄。對於某些對象,我有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)記錄。我需要檢查我是否有超過一個位置的object才能刪除最近的,否則我可能會刪除最早的(唯一的)記錄。

有沒有辦法優化這個過程?我在Ubuntu上運行MySQL最新版本。

乾杯, 馬克西姆

回答

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) 
+0

看起來好像它正在這樣做,在WHERE子句中添加表前綴。我想如果只有一個位置的對象,這是工作,因爲它獲得最小和最大的行。 – maxwell2022

相關問題