select date(v.visit_time) as date, 
CONCAT(round(count(distinct o.user_id)/count(distinct v.user_id) * 100, 1), '%') as cr
from order_tb o
right join visit_tb v
on o.user_id = v.user_id
AND DATE(v.visit_time) = DATE(o.order_time)
group by date(v.visit_time) 
order by date(v.visit_time) 

重点在于AND DATE(v.visit_time) = DATE(o.order_time) 要求日期对应相等

假设用户A在 2023-01-01 访问了商城,但在 2023-01-05 下单。

不加日期条件时

  • 关联条件仅依赖 user_id,会将 2023-01-05 的订单与 2023-01-01 的访问记录匹配。
  • 统计时会错误地将此订单计入 2023-01-01 的转化率,而 2023-01-05 的订单可能因为没有当天的访问记录被遗漏。

后果

  • 2023-01-01 的转化率虚高(订单被错误归因)。
  • 2023-01-05 的转化率可能被低估(订单可能未被统计到正确日期)。