1)请统计国庆头3天里,每天的近7日
  • 日期区间 DATEDIFF('2021-10-03',order_time)<9 -- 先对时间区间进行限定
2)日均订单完成量和日均订单取消量,按日期升序排序。结果保留2位小数。
  • 先查看每日的订单完成,取消情况
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;