MySQL查询未来30分钟记录时异常命中不符合条件数据的原因问询
问题原因
- 首先你的查询逻辑缺少时间范围的上界限制:仅设置了
datetime_requested >= 计算时间点的下界判断,没有添加最大时间的过滤规则,所有时间晚于该计算时间点的记录都会被命中。
你第二条SQL执行时,'2021-10-01 10:00' + interval 30 minute的计算结果是2021-10-01 10:30:00,库中记录的datetime_requested值为2021-10-01 11:20:00,完全满足大于等于10:30的条件,所以会被查询返回。 - 其次你的时间范围计算逻辑不符合需求:你需要的是拉取脚本运行时刻起未来30分钟内的记录,正确的过滤规则应该是同时限定上下界:
datetime_requested >= 脚本运行时间 AND datetime_requested < 脚本运行时间 + INTERVAL 30 MINUTE。你当前的写法把下界设为了运行时间+30分钟,和需求逻辑不符,如果你实测11:00运行的SQL能命中11:20的记录,需要检查是否存在服务器时区异常、字段类型不匹配、SQL书写笔误的问题。
正确实现方案
如果要每30分钟执行一次拉取当前时刻起未来30分钟的记录,可直接使用内置时间函数编写通用SQL:
SELECT * FROM queue WHERE datetime_requested >= NOW() AND datetime_requested < NOW() + INTERVAL 30 MINUTE;
内容的提问来源于stack exchange,提问作者michaelmcgurk
相关产品推荐
相关产品推荐

