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天数据,最后最外层循环做日期筛选就好