Выбор ответа Junior SQL дата-инженера обновлено

Сессионизация без PARTITION BY

Вопрос

Сессии считали через LAG(ts) OVER (ORDER BY ts) без PARTITION BY user_id. Что не так?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Пауза считается между событиями разных пользователей, сессии перемешаются. Без разбиения по пользователю «предыдущее событие» берётся из общей ленты всех пользователей, и пауза ничего не говорит о сессии конкретного человека.

Варианты ответа

  1. Ничего: ORDER BY по времени достаточно, LAG сам учтёт пользователя
  2. LAG без PARTITION BY возвращает только NULL на всех строках таблицы
  3. Запрос будет медленнее из-за сортировки, но результат останется тем же
  4. Пауза считается между событиями разных пользователей, сессии перемешаютсяправильный ответ

Разбор

Без разбиения по пользователю «предыдущее событие» берётся из общей ленты всех пользователей, и пауза ничего не говорит о сессии конкретного человека. LAG вернёт значения, просто не те. Результат будет неверным, а не только медленным.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.