MySQL-计算7月重新激活客户第二种方法_20161022
上周日休假去广西玩了一周,回来继续。
(一)上次用的是取当月首单日期,往前推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的更多相关文章
- iOS 清理缓存功能的实现第二种方法
/** * 清理缓存第二种方法 * * @param sender <#sender description#> */ - (void)clearCache:(id)sender { // ...
- MYSQL插入处理重复键值的几种方法
当unique列在一个UNIQUE键上插入包含重复值的记录时,默认insert的时候会报1062错误,MYSQL有三种不同的处理方法,下面我们分别介绍. 先建立2个测试表,在id列上创建unique约 ...
- MySQL修改数据表存储引擎的3种方法介绍
这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下 MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...
- 二、用Delphi10.3 创建一条JSON数据的第二种方法,并格式化输出
一.用Delphi10.3构造一个JSON数据的第二种方法,并格式化输出,代码如下: uses //System.JSON, System.JSON.Types, System.JSON.Writer ...
- 在MySQL中设置事务隔离级别有2种方法:
在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...
- 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 ...
- C#计算一段程序运行时间的三种方法
第一种方法利用System.DateTime.Now: static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代 ...
- MYSQL获取自增主键【4种方法】
通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提 ...
- MYSQL获取自增主键【4种方法】(转)
转自:http://blog.csdn.net/ultrani/article/details/9351573 作者已经写的非常好了,我不废话了,直接转载收藏: 通常我们在应用中对mysql执行了in ...
随机推荐
- xml.etree.ElementTree模块的封装
转载:https://www.cnblogs.com/hongten/p/hongten_python_xml_etree_elementtree.html 1 # -*- coding: utf-8 ...
- 【BLE】CC2541之自己定义按键
本篇博文最后改动时间:2017年01月06日,11:06. 一.简单介绍 本文以SimpleBLEPeripheral为例.介绍怎样将普通IO口(P12)自己定义为按键. 注:本文加入按键方法不与协议 ...
- java nio读取和写入文件
读取 package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...
- 触发器 (Delete Update)
--delete触发器IF(EXISTS(SELECT * FROM sysobjects WHERE name='T_PlanQtyDelete'))DROP TRIGGER T_PlanQtyDe ...
- 多媒体开发之---h264 图像参数级语义
(四)图像参数集语义 pic_parameter_set_rbsp( ) { // pic_parameter_set_id 用以指定本参数集的序号,该序号在各片的片头被引用. pi ...
- iOS 键盘变中文
plist文件添加 Localizations 添加一项字段Chinese (simplified)
- 开源监控系统Prometheus介绍
前言 Prometheus是CNCF的一个开源项目,Google BorgMon监控系统的开源版本,是一个系统和服务的监控系统.周期性采集metrics指标,匹配规则和展示结果,以及触发某些条件的告警 ...
- 如何进行Web服务的性能测试?
随着浏览器功能的不断完善,用户量不断的攀升,涉及到web服务的功能在不断的增加,对于我们测试来说,我们不仅要保证服务端功能的正确性,也要验证服务端程序的性能是否符合要求.那么性能测试都要做些什么呢?我 ...
- lambda map filter 用法
lambda 可以这样认为,lambda作为一个表达式 非常容易理解,在这里lambda简化了函数定义的书写形式.是代码更为简洁,但是使用函数的定义方式更为直观,易理解. #定义函数:普通方式 def ...
- sed 和awk结合取ip 地址
1.打印文件的第一列(域) : awk '{print $1}' filename 2.打印文件的前两列(域) : awk '{prin ...