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

如何使用MySQL SQL统计首次在7月下单的客户数量

如何统计首次在7月下单的客户数量

嘿,刚学MySQL遇到这种需求很正常,我来帮你一步步搞定这个查询!

核心需求是找出那些第一次下单就落在7月,并且7月之前完全没有下单记录的客户,下面给你两种常用的实现方法,你可以根据自己的习惯选择:

方法一:先计算每个用户的首次下单日期,再筛选

这种方法逻辑很直观,先算出每个用户最早的下单时间,再挑出那些首次下单在7月的用户:

SELECT COUNT(DISTINCT user_id) AS first_july_order_customers
FROM (
    -- 子查询:获取每个用户的首次下单日期
    SELECT user_id, MIN(processing_at) AS first_order_date
    FROM your_table_name  -- 替换成你的实际表名
    GROUP BY user_id
) AS user_first_orders
-- 筛选首次下单日期为7月的记录(记得替换年份)
WHERE MONTH(first_order_date) = 7 
  AND YEAR(first_order_date) = 2024;

代码解释:

  • 内层的子查询user_first_orders通过GROUP BY user_id分组,再用MIN(processing_at)拿到每个用户最早的下单日期。
  • 外层查询通过MONTH()和YEAR()函数筛选出首次下单在目标7月的用户,最后用COUNT(DISTINCT user_id)统计去重后的用户数量。

方法二:用NOT EXISTS排除有历史订单的用户

这种方法直接从7月的订单出发,排除掉那些之前已经下过单的用户,剩下的就是首次在7月下单的客户:

SELECT COUNT(DISTINCT o1.user_id) AS first_july_order_customers
FROM your_table_name o1
-- 先找到所有7月的订单
WHERE MONTH(o1.processing_at) = 7 
  AND YEAR(o1.processing_at) = 2024
-- 排除掉该用户在7月之前有过订单的情况
  AND NOT EXISTS (
      SELECT 1
      FROM your_table_name o2
      WHERE o2.user_id = o1.user_id
        AND o2.processing_at < '2024-07-01'
  );

代码解释:

  • 主查询先锁定所有2024年7月的订单记录。
  • NOT EXISTS子句会检查当前用户是否在2024年7月1日之前有过订单,如果有就排除这个用户。
  • 最后用COUNT(DISTINCT user_id)统计符合条件的用户总数。

注意事项

  • 一定要把your_table_name替换成你实际使用的数据表名称。
  • 如果你的数据包含多个年份的订单,务必指定YEAR()条件,不然会把所有年份里首次在7月下单的用户都统计进去。
  • 因为你的processing_at是date类型,所以MONTH()、YEAR()函数和日期比较都能正常工作,如果是datetime类型也同样适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:07:41