with t as
(
    select 
    date(order_time) dt, 
    count(mileage) 'day_complete',
    count(*) - count(mileage) 'day_cancle'
    from tb_get_car_record r
    join tb_get_car_order o on r.order_id = o.order_id
    group by date(order_time)
)


select
    dt,
    round(sum_7day / 7, 2) 'finish_num_7d',
    round(cancel_7day /7, 2)'cancel_num7day'
from 
(
    select dt,
        sum(day_complete) over(ORDER BY dt asc range between INTERVAL 6 day preceding and current row)'sum_7day',
        sum(day_cancle) over(ORDER BY dt asc range between INTERVAL 6 day preceding and current row)'cancel_7day'
    from t
)a

where dt between '2021-10-01' and '2021-10-03'
order by dt asc;
  • 先计算每天的使用量和取消量,然后使用窗口函数记录7天数据,最后最外层循环做日期筛选就好