Mr_Cxy

导航

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 

 

posted on 2016-10-31 20:41  Mr_Cxy  阅读(170)  评论(0编辑  收藏  举报