Q4. Find the moving average of daily revenue for each restaurant over a 7-day window.
CREATE TABLE zomato_restaurant_orders (
order_id NUMBER
, restaurant_id VARCHAR2(10)
, order_date DATE
, order_value NUMBER );
BEGIN
INSERT INTO zomato_restaurant_orders VALUES (1, 'R1', DATE '2024-07-01', 1000);
INSERT INTO zomato_restaurant_orders VALUES (2, 'R1', DATE '2024-07-01', 100);
INSERT INTO zomato_restaurant_orders VALUES (3, 'R1', DATE '2024-07-02', 950);
INSERT INTO zomato_restaurant_orders VALUES (4, 'R1', DATE '2024-07-03', 600);
INSERT INTO zomato_restaurant_orders VALUES (5, 'R1', DATE '2024-07-04', 300);
INSERT INTO zomato_restaurant_orders VALUES (6, 'R1', DATE '2024-07-04', 250);
INSERT INTO zomato_restaurant_orders VALUES (7, 'R1', DATE '2024-07-05', 500);
INSERT INTO zomato_restaurant_orders VALUES (8, 'R2', DATE '2024-07-01', 1500);
INSERT INTO zomato_restaurant_orders VALUES (9, 'R2', DATE '2024-07-02', 1400);
INSERT INTO zomato_restaurant_orders VALUES (10, 'R2', DATE '2024-07-03', 800);
INSERT INTO zomato_restaurant_orders VALUES (11, 'R2', DATE '2024-07-03', 1000);
INSERT INTO zomato_restaurant_orders VALUES (12, 'R1', DATE '2024-07-06', 1000);
INSERT INTO zomato_restaurant_orders VALUES (13, 'R1', DATE '2024-07-07', 100);
INSERT INTO zomato_restaurant_orders VALUES (14, 'R1', DATE '2024-07-08', 950);
INSERT INTO zomato_restaurant_orders VALUES (15, 'R1', DATE '2024-07-09', 600);
INSERT INTO zomato_restaurant_orders VALUES (16, 'R1', DATE '2024-07-10', 300);
END;
/
How to achieve this?
1. First calculate the total daily revenue for each restaurant
2. Then calculate the 7-day moving average of these daily totals
SELECT restaurant_id
, order_date
, SUM(order_value) AS daily_revenue
, ROUND( AVG(SUM(order_value) )
OVER (PARTITION BY restaurant_id
ORDER BY order_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
), 2) AS moving_7day_avg
FROM zomato_restaurant_orders
GROUP BY restaurant_id, order_date
ORDER BY restaurant_id, order_date;

Add a Comment