Пропуски 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 ошибок.