gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:01:15 24 4
gpt4 key购买 nike

我有一个跟踪 map 上对象的应用程序。我将对象位置存储在表 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) 记录,然后再插入新记录。在删除最近的记录之前,我需要检查 object 是否有多个位置,否则我可能会删除最旧的(唯一的)记录。

有没有办法优化这个过程?我在 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)

关于MySQL 保留 MAX 和 MIN 行并删除其余行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23332732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com