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

MySQL特定时间范围查询:查询昨日8点至今日8点插入的行数据

订单时段统计定时任务实现方案

需求说明

  • 统计范围:order表中前一日上午8点至当日上午8点区间内插入的行数据
  • 执行方式:每日自动运行的cron任务
  • 处理逻辑:统计该时段插入的订单总数量,写入另一张统计结果表
  • 关联业务表:order表,表结构参考如下:
    order表

实现步骤

1. 核心查询SQL(MySQL版示例)

假设order表的插入时间字段为create_time,可根据实际字段名替换:

SELECT COUNT(*) AS period_order_count
FROM `order`
WHERE create_time >= CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 08:00:00')
  AND create_time < CONCAT(CURDATE(), ' 08:00:00');

说明:使用<而非<=匹配结束时间,避免8点整插入的订单被重复统计到两个时段的结果中。
其他数据库可调整对应时间函数,比如PostgreSQL的时间条件可以写为:

WHERE create_time >= (CURRENT_DATE - INTERVAL '1 day') + INTERVAL '8 hour'
  AND create_time < CURRENT_DATE + INTERVAL '8 hour'

2. 写入统计结果表

假设统计结果表名为order_daily_stat,包含统计日期stat_date、时段订单量order_count、统计开始时间start_time、统计结束时间end_time四个字段,可直接用INSERT+SELECT语句一步完成统计+写入:

INSERT INTO order_daily_stat (stat_date, order_count, start_time, end_time)
SELECT 
  DATE_SUB(CURDATE(), INTERVAL 1 DAY) AS stat_date,
  COUNT(*) AS order_count,
  CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 08:00:00') AS start_time,
  CONCAT(CURDATE(), ' 08:00:00') AS end_time
FROM `order`
WHERE create_time >= CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 08:00:00')
  AND create_time < CONCAT(CURDATE(), ' 08:00:00');

3. cron任务配置

建议设置为每日上午8点05分执行,预留缓冲时间避免8点整的增量数据还未写入完成导致统计漏数,cron表达式如下:

5 8 * * * /usr/bin/mysql -u你的数据库用户名 -p'你的数据库密码' 你的业务库名 -e "上面的INSERT语句" >> /var/log/order_stat_cron.log 2>&1

注意:生产环境不要明文写密码,可以配置MySQL的免密登录文件,避免密码泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:36:02