MySQL_活动期间单笔订单最高的且满600元 判别是重激活客户还是10月注册客户_20161031
将29号和30号两个需求放到一个表当中 首先都满足在10.29到31号之间单笔订单最高的且满600元 数据结构为一个用户一个订单ID 一行一行的
上面是第一个表 我们当做主表 a
第二个表 我们找注册表 b left join a on a.用户ID=b.用户ID 找到用户的注册日期
第三个表 我们找之前博客判断新增留存属性用过的方法 取三段时间日期(9.29之前,9.29到10.29,10.29到10.31)的金额去判断 也是以用户ID为单位 一行一个记录 记为c表
SELECT d.*, CASE WHEN 9月29日之前的金额 IS NULL AND 历史30天的金额 IS NULL AND MONTH(注册日期)=10 THEN "10月注册且新下单" WHEN 9月29日之前的金额 IS NULL AND 历史30天的金额 IS NULL AND MONTH(注册日期)<>10 THEN "非10月注册且新下单" WHEN 9月29日之前的金额 IS NOT NULL AND 历史30天的金额 IS NULL THEN "间隔超过30天" ELSE NULL END AS 标识 FROM ( SELECT a.*,c.9月29日之前的金额,c.历史30天的金额,c.10月29日到31日的金额,DATE(b.注册时间) AS 注册日期 FROM ( # 29日-31日三天 最高金额订单的用户明细 SELECT 城市,用户ID,用户名称,销售员,订单日期,订单ID AS 最高金额订单ID,金额,CASE WHEN 金额>=600 THEN ">=600" ELSE "<600" END AS 标识1 FROM ( # 29日-31日三天 订单明细 SELECT 城市,用户ID,用户名称,销售员,DATE(订单日期) AS 订单日期,订单ID,SUM(金额) AS 金额 FROM a003_order WHERE 城市="长春" AND 订单日期>="2016-10-29" AND 订单日期<"2016-11-01" AND 金额>0 GROUP BY 城市,用户ID,订单ID ORDER BY 城市,用户ID,SUM(金额) DESC ) AS a1 GROUP BY 城市,用户ID ORDER BY 城市,金额 DESC )AS a LEFT JOIN a001_resterant AS b ON a.用户ID=b.用户ID LEFT JOIN ( SELECT 城市,用户ID ,SUM(IF((订单日期<"2016-09-29"),金额,NULL)) AS 9月29日之前的金额 ,SUM(IF((订单日期>="2016-09-29" AND 订单日期<"2016-10-29"),金额,NULL)) AS 历史30天的金额 ,SUM(IF((订单日期>="2016-10-29" AND 订单日期<"2016-11-01"),金额,NULL)) AS 10月29日到31日的金额 FROM a003_order WHERE 城市="长春" AND 金额>0 GROUP BY 城市,用户ID ) AS c ON a.用户ID=c.用户ID ) AS d HAVING 标识 IS NOT NULL ORDER BY d.金额 DESC