需求:
用户留存可以告诉您用户的忠诚度有多高。用户在某段时间内开始使用应用,经过一段时间后,仍然继续使用应用的被认作是留存用户;这部分用户占当时新增用户的比例即是留存率,统计周,月留存率
效果如下:

解决方案 »

  1.   

    不知道你的数据是如何组织的
    我以为最少需要有两个字段:最初使用时间和最后使用时间那么
    分组键为 DATE_FORMAT(最初使用时间,'%x%v')
    主栏为 DATE_FORMAT(最初使用时间,'%x%v')
    宾栏为 
    sum(if(DATE_FORMAT(最后使用时间,'%x%v')-主栏=0,1,0)) as `新用户`,
    sum(if(DATE_FORMAT(最后使用时间,'%x%v')-主栏>=1,1,0)) as `1周后`,
    sum(if(DATE_FORMAT(最后使用时间,'%x%v')-主栏>=2,1,0)) as `2周后`,
    .....
    依次类推
      

  2.   

    我的留存是这样设计的
    用户id  首次登录或使用时间  dru1 dru3 dru7
    首次登录或使用时间 时间戳或日期格式都行,个人喜好;
    dru1 dru3 dru7 tinyint类型 default 0,表示次日、三日、七日是否有登录;例如:用户id为100的用户 首次登录时间 2014-02-01;
    记录如下:
    100 2014-02-01 0 0 0
    当id为100的用户在次日即2014-02-02有登录时记录修改为如下:
    100 2014-02-01 1 0 0
    相对于首次登录时间的那一天有登录,即修改对应字段为1;统计数据 count(*) 总人数,sum(dru1)次日登录人数,sum(dru3)三日登录人数,sum(dru7)七日登录人数 group 首次登录时间
    1.其中登录时候的写入逻辑需要优化、我是把数据写入内存处理的、不然并发上来数据库抗不住;
    2.只需把对应的次日改成你对应的1周、2周,逻辑思路是一样的;
    希望对你有帮助
      

  3.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。