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

SQL查询:按小时拆分日期统计指定区间最高订单量

单小时最高订单量SQL实现方案

你之前使用MAX()、COUNT()、DATETIME()组合未得到预期结果,核心原因有两点:一是SQL语法不支持同一查询层级直接嵌套聚合函数(即直接写MAX(COUNT(*))不符合执行逻辑);二是没有先将订单时间对齐截断到小时粒度做分组,无法独立统计每个小时段的订单数。

实现步骤

  • 小时粒度对齐:将每条订单的时间字段截断到所属小时的起始点,抹除分、秒、毫秒差异,作为每个小时段的唯一标识,不同数据库的截断写法如下:
    • MySQL:DATE_FORMAT(order_time, '%Y-%m-%d %H:00:00')
    • PostgreSQL:DATE_TRUNC('hour', order_time)
    • SQL Server:DATEADD(hour, DATEDIFF(hour, 0, order_time), 0)
  • 范围筛选+分组统计:先过滤出2022年7月8日至2022年7月15日的所有有效订单,再按截断后的小时字段分组,统计每个独立小时段的订单总数。
  • 极值提取:对分组统计得到的各小时订单量结果,提取最大值即可。

参考代码(以MySQL为例)

-- 仅返回最高单小时订单量数值
SELECT MAX(hour_order_cnt) AS max_single_hour_order
FROM (
    SELECT COUNT(*) AS hour_order_cnt
    FROM orders
    WHERE order_time >= '2022-07-08 00:00:00'
      AND order_time < '2022-07-16 00:00:00'
    GROUP BY DATE_FORMAT(order_time, '%Y-%m-%d %H:00:00')
) AS hour_stat;

-- 返回最高订单量对应的具体小时段+数值
SELECT
    DATE_FORMAT(order_time, '%Y-%m-%d %H:00:00') AS stat_hour,
    COUNT(*) AS hour_order_cnt
FROM orders
WHERE order_time >= '2022-07-08 00:00:00'
  AND order_time < '2022-07-16 00:00:00'
GROUP BY DATE_FORMAT(order_time, '%Y-%m-%d %H:00:00')
ORDER BY hour_order_cnt DESC
LIMIT 1;

注意:时间范围筛选不建议使用BETWEEN,采用>= 起始时间、< 统计截止日次日0点的写法,可以避免因为时间字段携带毫秒/微秒精度,遗漏统计周期最后时段的订单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:51:45