Пропуски Junior SQL дата-инженера обновлено
Дедупликация через ROW_NUMBER
Вопрос
Заполните пропуски, чтобы оставить последнюю копию каждого события.
SELECT * FROM (
SELECT e.*,
__(1)__() OVER (__(2)__ BY event_id ORDER BY received_at __(3)__) AS rn
FROM raw_events e
) t
WHERE rn = __(4)__;
Попробуйте сами
Заполните пропуски по номерам.
1
2
3
4
Показать ответ и разбор
Коротко
ROWNUMBER нумерует копии внутри каждого eventid, сортировка по убыванию времени получения ставит последнюю копию первой, фильтр rn = 1 её оставляет. RANK здесь опасен: при одинаковом времени получения две копии получат ранг 1.
Что в пропусках
1
ROW_NUMBER или row_number
2
PARTITION или partition
3
DESC или desc
4
1
Разбор
ROW_NUMBER нумерует копии внутри каждого event_id, сортировка по убыванию времени получения ставит последнюю копию первой, фильтр rn = 1 её оставляет. RANK здесь опасен: при одинаковом времени получения две копии получат ранг 1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.