保留跟踪

时间:2012-09-21 12:44:35

标签: mysql sql excel pivot ansi-sql

假设我有一只愤怒的小鸟游戏。

我想知道有多少玩家每月购买“强大的老鹰”武器,这些玩家在前几个月购买了强大的老鹰武器系统中的LTV

我有每个客户购买的所有商品的日期。

我实际上想要的是二维的 矩阵将告诉我从哪个球员的百分比 对于特定电流,对于X

示例:

example_png (它没有让我把图片内联,所以请按链接看图片)

现在,我找到了一种让玩家数量增加的方法 实际上来自LTV_month_X to LTV_month_Y that LTV_month_Y的是他们当前的 使用SQL查询和Excel数据透视表在系统内进行活动的月份。

我尝试找出的主要是如何获得可能进行转换的人的基数。

一些定义: LTV_month_X = DATEDIFF(MONTH, first_eagle_month, specific_eagle_month)+1

最好我想在 ANSI-SQL 中使用解决方案,如果不是,那么MySQL或 MSSQL但根本不应使用任何Oracle函数。

由于我正在寻找转换的百分比,两步计划也可以起作用,首先找到潜在的计划,然后找到那些从LTV_month_X到LTV_month_Y来衡量保留的实际计划。

最后一个问题:我需要向下钻取并找到从任何阶段X移动到任何其他阶段Y(> X)的客户的实际ID。

2 个答案:

答案 0 :(得分:1)

这里使用LTV一词并不清楚。我假设你的意思是用户的生命周期。

如果我理解了这个问题,你会根据每个都有一个或多个事件的实体列表询问,如何按最后一个事件的月份和之前的一个月对实体进行分组(例如计数)最后一次活动。

在mysql中,你可以使用变量来做到这一点。我不打算对整个概念进行expalin,但基本上,当你在SELECT语句中编写@var:= column时,那个变量被分配了该列的值,你可以使用它来比较连续列之间的值,例如: LEAST(IF(@ VAR =柱,@相同:= @相同+ 1,@相同:= 0),@ VAR:=列)

使用LEAST是确保执行顺序的一种技巧。

答案 1 :(得分:0)

您正在寻找的两个维度是

  1. 实际购买月份
  2. 相对购买月
  3. 
    SELECT 
       player_id, 
       TRUNCATE(first_purchase,'MM') AS first_month , 
       TRUNCATE(current_purchase_date ,'MM') AS purchase_month, 
       months_between(current_purchase _date, first_purchase_date)+1 AS relative_month, 
       SUM(purchase_amount) AS total_purchase, 
       COUNT(DISTINCT player_id) AS player_count 
    FROM ...  

    现在您可以将购买月份转换为相对月份并汇总