我尝试用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中做错了什么吗?
答案 0 :(得分:0)
当日期值为null时,DATE_SUB()返回null,这可能就是原因。因为您是LEFT JOIN,所以future_orders记录可以为null /不存在