上周日休假去广西玩了一周,回来继续。

(一)上次用的是取当月首单日期,往前推30天 代码比较繁琐 这次方法是借助变量 错行进行判断 一个用户上次最后一次下单时间和下次下单时间的时间差

也就是形成一个相差天数的字段和第几天次的字段  去判断用户的留存激活新增属性

SQL代码如下

SELECT *, SUM(IF(上次金额 IS NULL,(@k := 1),(@k :=@k + 1))) AS 第几天次
FROM(
SELECT b.*, c.订单日期 AS 上次订单日期,c.金额 AS 上次金额,TIMESTAMPDIFF(DAY,c.订单日期 ,b.订单日期) AS 相差天数
FROM(
SELECT a.*,(@i :=@i + 1) AS ID1
FROM (
SELECT city AS 城市,username AS 用户ID,order_date AS 订单日期,SUM(pay_money) AS 金额
FROM `test_a03order`
GROUP BY city,username,order_date
ORDER BY city,username,order_date
) AS a,(SELECT @i := 0) AS a1
) AS b
LEFT JOIN (
SELECT a.*,(@j :=@j + 1) AS ID2
FROM (
SELECT city AS 城市,username AS 用户ID,order_date AS 订单日期,SUM(pay_money) AS 金额
FROM `test_a03order`
GROUP BY city,username,order_date
ORDER BY city,username,order_date
) AS a,(SELECT @j := 1) AS a2
)AS c ON b.用户ID=c.用户ID AND ID1=ID2
) AS d
GROUP BY id1

(二)上面的表当做一个子表 case when 进行条件判断 计算下7月份各城市用户ID的留存情况

SELECT  城市,用户ID,订单日期,
CASE WHEN 第几天次=1 THEN "新增"
WHEN 相差天数 IS NOT NULL AND 相差天数<=30 THEN "留存"
WHEN 相差天数>30 THEN "重新激活" ELSE NULL END AS 激活情况
FROM (
SELECT *, SUM(IF(上次金额 IS NULL,(@k := 1),(@k :=@k + 1))) AS 第几天次
FROM(
SELECT b.*, c.订单日期 AS 上次订单日期,c.金额 AS 上次金额,TIMESTAMPDIFF(DAY,c.订单日期 ,b.订单日期) AS 相差天数
FROM(
SELECT a.*,(@i :=@i + 1) AS ID1
FROM (
SELECT city AS 城市,username AS 用户ID,order_date AS 订单日期,SUM(pay_money) AS 金额
FROM `test_a03order`
GROUP BY city,username,order_date
ORDER BY city,username,order_date
) AS a,(SELECT @i := 0) AS a1
) AS b
LEFT JOIN (
SELECT a.*,(@j :=@j + 1) AS ID2
FROM (
SELECT city AS 城市,username AS 用户ID,order_date AS 订单日期,SUM(pay_money) AS 金额
FROM `test_a03order`
GROUP BY city,username,order_date
ORDER BY city,username,order_date
) AS a,(SELECT @j := 1) AS a2
)AS c ON b.用户ID=c.用户ID AND ID1=ID2
) AS d
GROUP BY id1
) AS e
WHERE DATE_FORMAT(e.订单日期,"%Y%m")=201607

MySQL-计算7月重新激活客户第二种方法_20161022的更多相关文章

  1. iOS 清理缓存功能的实现第二种方法

    /** * 清理缓存第二种方法 * * @param sender <#sender description#> */ - (void)clearCache:(id)sender { // ...

  2. MYSQL插入处理重复键值的几种方法

    当unique列在一个UNIQUE键上插入包含重复值的记录时,默认insert的时候会报1062错误,MYSQL有三种不同的处理方法,下面我们分别介绍. 先建立2个测试表,在id列上创建unique约 ...

  3. MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下   MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...

  4. 二、用Delphi10.3 创建一条JSON数据的第二种方法,并格式化输出

    一.用Delphi10.3构造一个JSON数据的第二种方法,并格式化输出,代码如下: uses //System.JSON, System.JSON.Types, System.JSON.Writer ...

  5. 在MySQL中设置事务隔离级别有2种方法:

    在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...

  6. HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法

    HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...

  7. C#计算一段程序运行时间的三种方法

    第一种方法利用System.DateTime.Now: static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代 ...

  8. MYSQL获取自增主键【4种方法】

    通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提 ...

  9. MYSQL获取自增主键【4种方法】(转)

    转自:http://blog.csdn.net/ultrani/article/details/9351573 作者已经写的非常好了,我不废话了,直接转载收藏: 通常我们在应用中对mysql执行了in ...

随机推荐

  1. Hibernate学习五----------组件属性

    © 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...

  2. linux下性能监控工具

    一.  Linux 性能监控的概述 系统由若干子系统构成,通常改动一个子系统有可能影响到另外一个子系统.甚至会导致整个系统不稳定.崩溃. 所以说优化.监測.測试一般是连在一起的,并且是一个循环并且长期 ...

  3. iBatis2 SqlMap中经常使用sql语句

    本来我也不喜欢iBatis,那是由于我当时还不怎么会用它,如今我想说,iBatis是个好东西,不信你试试看.以下是我在项目实践中对iBatis的一个小总结.希望帮助众多在疲于iBatis编码而无暇思考 ...

  4. Maven中央仓库地址(实用版)

    最近做项目的时候,一直发现常用的oschina maven源一直都没有反应,后面发现原来oschina竟然关闭了maven源服务,后面经同事推荐了阿里云的maven源,这速度杠杠的 Maven 中央仓 ...

  5. 在mac下搭建java开发环境

    刚刚从windows系统转到使用mac系统.感觉不是特别熟悉,须要一定的适应时间. 以下简介一下mac下搭建主要的java开发环境. 1.安装jdk 安装jdk1.7后,发现不须要进行环境变量配置,直 ...

  6. iOS 使用 Core Plot 绘制统计图表入门

     本文转载至 http://blog.csdn.net/zhibudefeng/article/details/7677457   iOS(iPhone/iPad) 下图形组件有两个有名的,s7gra ...

  7. SAM4E单片机之旅——13、LCD之ASF初步

    在Atmel Studio 6中,集成了Atmel Software Framework(ASF框架).通过它提供的库,可以很快速地完成新的项目. 这次的最终目标使用ASF在LCD上显示出文字“Hel ...

  8. EasyPlayerPro windows播放器之多窗口播放音量控制方法

    EasyPlayerPro-win基础版本的音频播放为单一通道播放,即同一时间仅允许一个通道播放声音,现应客户需求,在基础版本上实现独立的音频播放,即每个通道可同时播放视频和音频; 设计思路 将音频播 ...

  9. python循环导入的解决方案

    解决循环import的方法主要有几种:   1.延迟导入(lazy import)   即把import语句写在方法或函数里面,将它的作用域限制在局部. 这种方法的缺点就是会有性能问题.     2. ...

  10. sqlite与sqlserver区别

    1.查询时把两个字段拼接在一起 --sqlserver-- select Filed1+'@'+Filed2 from table --sqlite-- select Filed1||'@'||Fil ...