MySQL的保留率

时间:2017-06-07 08:34:57

标签: mysql

我尝试用mysql计算保留率并从这个开始:

SELECT 
    s_order.ordertime, 
    DATE_SUB(future_orders.ordertime, INTERVAL 90 DAY), 
    count(distinct s_order.userID) as active_users, 
    count(distinct future_orders.userID) as retained_users
FROM s_order
LEFT JOIN s_order as future_orders on
      s_order.userID = future_orders.userID
      AND s_order.ordertime = DATE_SUB(future_orders.ordertime, INTERVAL 90 DAY);

这不起作用 - 我让所有用户都处于活动状态,因此我将DATE_SUB(future_orders.ordertime, INTERVAL 90 DAY),添加到选择标准中以查看发生了什么。但是它返回NULL - 但为什么呢?

作为参考,我确实看了一下这个解释: https://www.periscopedata.com/blog/how-to-calculate-cohort-retention-in-sql.html

我的表格有

之类的结构
s_orders:
ID | userID | ordertime

我希望结果有多少不同的用户订购了一般的东西,以及有多少用户在过去90天内再次订购了一些东西,以便留住顾客。

有人知道我在MySQL中做错了什么吗?

1 个答案:

答案 0 :(得分:0)

当日期值为null时,DATE_SUB()返回null,这可能就是原因。因为您是LEFT JOIN,所以future_orders记录可以为null /不存在