В истории заказов хранится несколько строк на один 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;
Оконные функции всегда помогают в работе с историческими данными, выявлением актуальной строки, удалением дублей, а также задачами версионирования строк.
Ставьте реакции, если стоит делиться больше задачами с собесов аналитиков и аналитиков-инженеров
Больше технических заданий на курсе - старт 14 сентября