1)请统计国庆头3天里,每天的近7日
- 日期区间 DATEDIFF('2021-10-03',order_time)<9 -- 先对时间区间进行限定
- 先查看每日的订单完成,取消情况
SELECT DATE(order_time) dt, COUNT(order_time) total_ord, #总订单数 COUNT(mileage) ord_com,#订单完成数 COUNT(order_time)-COUNT(mileage) cancel_ord #订单取消数 FROM tb_get_car_order GROUP BY dt ORDER BY dt;
- 使用滑动窗口函数,计算7天内累积订单完成数,订单取消数(理论上,只有每天都有订单时,才能用滑动窗口函数)
SELECT DATE(order_time) dt, SUM(COUNT(mileage))OVER(ORDER BY DATE(order_time) ROWS 6 PRECEDING ) ord_com,#订单完成数 SUM(COUNT(order_time)-COUNT(mileage))OVER(ORDER BY DATE(order_time) ROWS 6 PRECEDING) cancel_ord, #订单取消数 COUNT(1)OVER(ORDER BY DATE(order_time) ROWS 6 PRECEDING) total_day FROM tb_get_car_order GROUP BY dt;
- 取10.1—10.3的数据,结果保留2位小数,并按照时间升序排列
WITH t1 AS( SELECT DATE(order_time) dt, SUM(COUNT(mileage))OVER(ORDER BY DATE(order_time) ROWS 6 PRECEDING ) ord_com,#订单完成数 SUM(COUNT(order_time)-COUNT(mileage))OVER(ORDER BY DATE(order_time) ROWS 6 PRECEDING) cancel_ord, #订单取消数 COUNT(1)OVER(ORDER BY DATE(order_time) ROWS 6 PRECEDING) total_day FROM tb_get_car_order WHERE DATEDIFF('2021-10-03',order_time)<9 GROUP BY dt) SELECT dt,ROUND(ord_com/total_day,2) finish_num_7d,ROUND(cancel_ord/total_day,2) cancel_num_7d FROM t1 WHERE dt BETWEEN '2021-10-01' AND '2021-10-03' ORDER BY dt;