• 首先计算每天的完成量与未完成量,利用窗口函数计算每一天的近七天的平均值,再筛选符合要求的天数
  • 问题:似乎无法避免近七天的要求,即使使用range,如果有一天没有订单可能会报错?
  • 方法2:使用自连接直接对于某一天计算它对应七天内的订单情况,SELECT中加入子循环利用日期差函数,

SELECT *
FROM (
    SELECT dt
            ,ROUND(SUM(finish_num) OVER(ORDER BY dt  RANGE INTERVAL 6 DAY PRECEDING) / 7, 2) AS finish_num_7d
            ,ROUND(SUM(cancel_num) OVER(ORDER BY dt  RANGE INTERVAL 6 DAY PRECEDING) / 7, 2) AS cancel_num_7d
    FROM(
        SELECT DATE(event_time) AS dt
                , COUNT(start_time) AS finish_num
                , COUNT(*) - COUNT(start_time) AS cancel_num
        FROM tb_get_car_order
        JOIN tb_get_car_record USING(order_id)
        GROUP BY dt
    ) data1
) data2
WHERE dt BETWEEN '2021-10-01' AND '2021-10-03'