zoukankan      html  css  js  c++  java
  • MySQL活动期间订单满600元并且在活动日期之前超过30天没有下过单_20161030

    计算 活动期间订单满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" 
  • 相关阅读:
    python struct详解
    python 二维矩阵及转byte知识点
    c# HttpListener拒绝访问
    c# 捕获一般获取不到的异常
    查看dll依赖项
    Javascript 进阶 作用域 作用域链
    【Android进阶】Gson解析json字符串的简单应用
    做web项目时对代码修改后浏览器端不生效的应对方法(持续更新)
    异常Exception in thread "AWT-EventQueue-XX" java.lang.StackOverflowError
    玩转web之json(五)---将表单通过serialize()方法获取的值转成json
  • 原文地址:https://www.cnblogs.com/Mr-Cxy/p/6012801.html
Copyright © 2011-2022 走看看