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

MySQL如何查询10天前至1小时前时间范围内的数据

错误原因
  • 原有逻辑错误核心是滥用date()函数做时间截断:该函数会丢弃时间值里的时、分、秒信息,仅保留年月日,只要当前时间往前推1小时的结果和当前时间落在同一个自然日,二者的date()返回值就完全一致,根本没法卡准小时级的时间边界。
  • 原有筛选条件只写了大于计算出的起始日期,既没有限定截止时间的上边界,还会因为日期截断漏掉起始日期当天早于截断点的有效数据,查出来的结果要么多要么少。
正确写法

先明确两个时间边界的计算逻辑,全程不要用date()截断时间,保留完整的时分秒精度:

  • 区间上界(截止时间):当前时间往前推1小时,即DATE_SUB(NOW(), INTERVAL 1 HOUR)
  • 区间下界(起始时间):上述截止时间再往前推10天,即DATE_SUB(DATE_SUB(NOW(), INTERVAL 1 HOUR), INTERVAL 10 DAY)

替换到你的查询语句里即可,参考片段:

.....
AND `time` >= DATE_SUB(DATE_SUB(NOW(), INTERVAL 1 HOUR), INTERVAL 10 DAY)
AND `time` <= DATE_SUB(NOW(), INTERVAL 1 HOUR)
GROUP BY ds
.....
效果验证

举个对应你描述的场景:如果当前时间是某日上午8:00,计算后得到的截止时间是当日上午7:00,起始时间是10天前的上午7:00,最终返回的就是这两个时间点之间的全量数据,完全匹配需求。

注意:如果你的time字段是字符串格式存储的时间,需要先确认格式能被MySQL正常识别解析,否则建议先转成DATETIME类型再做比较,避免隐式转换导致索引失效、筛选结果错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:48:07