Кейс с собеседований на SQL
В истории заказов хранится несколько строк на один order_id с разными статусами и датами обновления. Необходимо оставить строки с последним актуальным статусом, не применяя JOIN.
➡️ Решение: используем ROW_NUMBER(), чтобы пронумеровать версии по дате и взять последнюю актуальную
WITH ranked_orders AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY order_id ORDER BY updated_at DESC ) AS rn FROM orders_history ) SELECT order_id, status, updated_at, amount FROM ranked_orders WHERE rn = 1;
Оконные функции всегда помогают в работе с историческими данными, выявлением актуальной строки, удалением дублей, а также задачами версионирования строк.
Ставьте реакции, если стоит делиться больше задачами с собесов аналитиков и аналитиков-инженеров