码迷,mamicode.com
首页 > 数据库 > 详细

MySQL活动期间订单满600元并且在活动日期之前超过30天没有下过单_20161030

时间:2016-10-30 13:39:34      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:log   ase   有用   weight   嵌套   case   cas   并且   nbsp   

计算 活动期间订单满600元并且在活动日期之前超过30天没有下过单

首先拿到这个需求,首先需要明确活动日期区间 10.29-10.31,其次要取这个时间段内某天订单额最高的那天及订单额,再次需要判断这个用户在29号之前下过单,在29号之前的末单日期和10.29号之间的天数间隔大于30天  

因此就转化为取两个表日期的问题

1、第一个表取所有用户在10.29号之前的末单日期,末单金额,这个表为主表 后面表left join 它

2、第二个表取活动期间订单额最高的那天(需要嵌套,先把这3天每天金额算出来,group by 用户ID,订单日期 按照用户ID升序 金额降序 再把这个表group by 用户ID 取出金额最高的这天)

3、然后第二个表left join 第一个表 以用户ID相等为条件

 

SELECT c.城市,c.用户ID,d.用户名称,d.用户地址,d.联系电话,c.销售员,c.订单日期,c.订单额,c.标识,c.上次订单日期 AS 29号之前末单日期,c.上次金额 AS 29号之前末单金额,e.第几天次 AS 29号之前末单为第几天次,c.上次下单距离29号相差天数 AS 29号之前末单日期距离29号相差天数
FROM (        
    SELECT a.*,b.订单日期,b.订单额
        ,CASE WHEN b.销售员 IS NULL THEN a.上次销售员 ELSE b.销售员 END AS 销售员
        ,CASE WHEN b.订单日期 IS NOT NULL AND b.订单额>=600 THEN ">=600" WHEN b.订单日期 IS NOT NULL AND b.订单额<600 THEN "<600" ELSE "10.29号到11.1号未下单" END AS 标识
        ,TIMESTAMPDIFF(DAY,a.上次订单日期,"2016-10-29")AS 上次下单距离29号相差天数
    FROM (#取所有用户10.29号之前最后一次订单日期 
        SELECT  a2.城市,a2.用户ID,a2.订单日期 AS 上次订单日期,a2.销售员 AS 上次销售员,a2.金额 AS 上次金额
        FROM (
            SELECT a1.城市,a1.用户ID,DATE(a1.订单日期) AS 订单日期,SUM(金额) AS 金额,a1.销售员
            FROM `a003_order` AS a1 
            WHERE  a1.城市=长春 AND a1.订单日期<"2016-10-29" AND a1.金额>0#取完各用户 
            GROUP BY a1.用户ID,DATE(a1.订单日期)
            ORDER BY a1.用户ID,DATE(a1.订单日期) DESC
        ) AS a2
        GROUP BY a2.用户ID
    ) AS a
    LEFT JOIN (#用户在10.29到11.01订单额最高的一天
        SELECT b2.用户ID,b2.订单日期,b2.销售员,b2.订单额
        FROM (
            SELECT b1.用户ID,DATE(b1.订单日期) AS 订单日期,b1.销售员,SUM(b1.金额) AS 订单额
            FROM `a003_order` AS b1
            WHERE b1.城市="长春" AND b1.订单日期>="2016-10-29" AND b1.订单日期<"2016-11-01" AND b1.金额>0 
            GROUP BY b1.用户ID,DATE(b1.订单日期)
            ORDER BY b1.用户ID,SUM(b1.金额) DESC 
        ) AS b2
        GROUP BY b2.用户ID
    ) AS b ON a.用户ID=b.用户ID
) AS c
LEFT JOIN `a001_resterant`AS d ON d.用户ID=c.用户ID
LEFT JOIN `tb003_08` AS e ON e.用户ID=c.用户ID AND e.上次订单日期=c.上次订单日期
WHERE c.上次下单距离29号相差天数>=30 AND c.标识=">=600" 

 

MySQL活动期间订单满600元并且在活动日期之前超过30天没有下过单_20161030

标签:log   ase   有用   weight   嵌套   case   cas   并且   nbsp   

原文地址:http://www.cnblogs.com/Mr-Cxy/p/6012801.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!