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

错误SQL修复:查询任意12个月周期内下单2次的member_id

原语句错误原因
  • 分组统计时使用COUNT(t1.order_id)统计的是用户的累计总订单数,和关联t2表时加的12个月时间限制完全没有关联,所以最终返回的是所有累计下单≥2次的用户,和需求不符。
  • LEFT JOIN的使用也多余,这里需要匹配到符合时间窗口的关联订单,用INNER JOIN更合适。
正确实现方案

方案1:修改自关联逻辑

不需要分组聚合,只要匹配到任意两个符合12个月间隔的订单即可:

SELECT DISTINCT t1.member_id
FROM orders t1
INNER JOIN orders t2
  ON t1.member_id = t2.member_id
  AND t2.order_id <> t1.order_id -- 排除自身订单匹配
  AND t2.date_paid BETWEEN DATE_SUB(t1.date_paid, INTERVAL 12 MONTH) AND t1.date_paid;

方案2:滑动窗口函数(性能更优,适合大数据量场景)

通过滑动窗口直接统计每个订单对应的前12个月累计订单数,只要有一个窗口满足条件即可:

SELECT DISTINCT member_id
FROM (
  SELECT
    member_id,
    COUNT(order_id) OVER (
      PARTITION BY member_id
      ORDER BY UNIX_TIMESTAMP(date_paid)
      RANGE BETWEEN 31536000 PRECEDING AND CURRENT ROW -- 12个月对应的秒数,滑动时间窗口
    ) AS cnt_12m
  FROM orders
) t
WHERE cnt_12m >= 2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:57:03