You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于时间戳分组删除MySQL表中指定10分钟范围的记录?

按10分钟时间区间分组删除MySQL记录的正确写法

你原DELETE语句的问题在于,没有对c.datestamp做和GROUP BY逻辑一致的时间戳取整处理,导致无法匹配到指定时间10分钟范围内的所有记录。

先验证要删除的记录(避免误删)

先执行SELECT语句确认目标记录:

SELECT c.* FROM commissions c 
LEFT JOIN comm_manuf_link ml ON c.id = ml.comm_id
LEFT JOIN manuf m ON ml.manuf_id = m.id
WHERE m.id = '21'
AND UNIX_TIMESTAMP(c.datestamp) DIV 600 = UNIX_TIMESTAMP('2023-07-20 10:53:17') DIV 600;

正确的DELETE语句

确认无误后,执行删除操作:

DELETE c.* FROM commissions c 
LEFT JOIN comm_manuf_link ml ON c.id = ml.comm_id
LEFT JOIN manuf m ON ml.manuf_id = m.id
WHERE m.id = '21'
AND UNIX_TIMESTAMP(c.datestamp) DIV 600 = UNIX_TIMESTAMP('2023-07-20 10:53:17') DIV 600;

逻辑说明

UNIX_TIMESTAMP(datetime) DIV 600会将时间转换为以10分钟(600秒)为单位的整数,同一10分钟窗口内的所有时间都会得到相同的整数值,这样就能精准匹配到和指定时间相差10分钟范围内的所有记录,和你用GROUP BY UNIX_TIMESTAMP(c.datestamp) DIV 600的分组逻辑完全一致。

如果commissions表的datestamp字段本身存储的是UNIX时间戳(而非datetime类型),可以简化为:

DELETE c.* FROM commissions c 
LEFT JOIN comm_manuf_link ml ON c.id = ml.comm_id
LEFT JOIN manuf m ON ml.manuf_id = m.id
WHERE m.id = '21'
AND c.datestamp DIV 600 = UNIX_TIMESTAMP('2023-07-20 10:53:17') DIV 600;

内容的提问来源于stack exchange,提问作者RonnieT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:52:43