题解 | #国庆期间近7日日均取消订单量#
国庆期间近7日日均取消订单量
https://www.nowcoder.com/practice/2b330aa6cc994ec2a988704a078a0703
# 感觉和上一道困难题如出一辙。这道明显要简单许多
# 求近7日日均订单完成量和日均订单取消量
# 限制是国庆前三天每天的
# 尝试使用滑动窗口函数。
# 先统计最远的,2021-9-25到10-3每天的订单完成和取消量
# 再滑动统计日均完成和取消量
# 临时表,对日期分组,计算每天的成功订单数、未完成订单数
WITH temp_0 AS(
SELECT DATE(order_time) dt, COUNT(fare) over_cnt, SUM(IF(fare, 0, 1)) fail_cnt
FROM tb_get_car_order
# 不要忘了限定时间范围
WHERE DATE(order_time) BETWEEN '2021-09-25' AND '2021-10-3'
GROUP BY dt
ORDER BY dt
)
# 主查询,直接用滑动窗口函数求前6天到今天的均值即可。当然,这样求出来是每天都有记录,因此在最后限定跳过前6条,输出3条记录即可
SELECT dt, ROUND(AVG(over_cnt) OVER(ORDER BY dt ROWS 6 PRECEDING),2) finish_num_7d, ROUND(AVG(fail_cnt) OVER(ORDER BY dt ROWS 6 PRECEDING),2) cancel_num_7d
FROM temp_0
ORDER BY dt
LIMIT 6, 3
踩的坑:虽然写了要限定时间范围,但是写代码的时候第一次忘了,有个用例没通过才想起来

