SELECT
Customer_ID, Order_Date,
LAG(Order_Date) OVER (PARTITION BY Customer_ID ORDER BY Order_Date) AS Previous_Order_Date
FROM Orders;
-- Then: Current - Previous
๐น 17. Finding Inactive Customers
SELECT Customer_ID, MAX(Order_Date) AS Last_Order_Date
FROM Orders
GROUP BY Customer_ID;
-- Compare with CURRENT_DATE for 90-day inactivity
๐น 18. Common Mistake
Avoid:
WHERE YEAR(Order_Date) = 2026Prefer: Range filter โ it's clearer and index-friendly.
๐ผ Real-World Applications
โ Monthly revenue, daily sales, YoY/MoM growth, retention, churn, purchase frequency, cohort, subscription expiry
๐ฏ SQL Interview Challenge: Find each customer's most recent order
WITH Ranked_Orders AS (
SELECT
Customer_ID, Order_ID, Order_Date,
ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Order_Date DESC) AS rn
FROM Orders
)
SELECT Customer_ID, Order_ID, Order_Date
FROM Ranked_Orders
WHERE rn = 1;
๐ก Double Tap โค๏ธ For More