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

如何用SQL统计客户首单后1小时内的总下单数量

需求说明

获取每位客户在首单生成后1小时内的累计下单数量,要求无需先计算首单时间再关联原表,可一步完成计算。

表结构说明

订单表字段如下:

  • DateTime:订单下单时间
  • CustomerId:客户ID
  • 其余字段不参与本次计算
实现方案

可以通过窗口函数在单次订单表扫描中完成计算,不需要额外做子查询和原表的关联操作,性能优于先计算首单时间再join回原表的实现方式,符合一步完成的需求。

纯单层查询写法(所有主流数据库兼容)

无需嵌套子查询,一层查询直接完成统计:

SELECT
  CustomerId,
  SUM(
    CASE 
      -- 筛选首单后1小时内的订单,包含首单本身;如需排除首单可加 AND DateTime > MIN(DateTime) OVER (PARTITION BY CustomerId)
      WHEN DateTime <= MIN(DateTime) OVER (PARTITION BY CustomerId) + INTERVAL 1 HOUR 
      THEN 1 
      ELSE 0 
    END
  ) AS order_cnt_in_1h_after_first
FROM orders
GROUP BY CustomerId

简化写法(适配支持QUALIFY语法的数据库,如BigQuery、Spark SQL、Snowflake)

代码更简洁可读性更高:

SELECT
  CustomerId,
  COUNT(*) AS order_cnt_in_1h_after_first
FROM orders
QUALIFY DateTime <= MIN(DateTime) OVER (PARTITION BY CustomerId) + INTERVAL 1 HOUR
GROUP BY CustomerId
语法适配说明

不同数据库的时间间隔计算语法存在差异,可根据使用的数据库做对应调整:

  • MySQL:DATE_ADD(first_order_dt, INTERVAL 1 HOUR)
  • PostgreSQL:first_order_dt + INTERVAL '1 hour'
  • SQL Server:DATEADD(HOUR, 1, first_order_dt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:42:02