Самая длинная серия дней подряд с входом

Средняя gaps-and-islands T-Банк

Условие задачи

В таблице logins фиксируется каждый вход пользователя в приложение (в один день может быть несколько записей). Для каждого пользователя найди длину самой длинной серии подряд идущих календарных дней, в которые он заходил. Верни колонки user_id и streak_length. Отсортируй по streak_length по убыванию, затем по user_id по возрастанию.

Схема данных

CREATE TABLE logins (
  user_id     INTEGER NOT NULL,
  login_date  TEXT    NOT NULL  -- формат YYYY-MM-DD
);

Темы

gaps-and-islands window-functions row_number julianday streak

Подсказки

Что проверяет эта задача

Задача «Самая длинная серия дней подряд с входом» учит решать задачи по теме «gaps-and-islands» так, как это спрашивают на собеседовании аналитика данных. Такие задачи встречаются на собеседованиях в T-Банк и других IT-компаниях. Уровень средний — типичная боевая задача на уверенное владение SQL.

Как подступиться к решению

Сначала разберись со схемой данных и пойми, какой результат нужен на выходе. Определи, какие таблицы и поля задействованы, и собирай запрос пошагово: фильтрация → соединение или группировка → итоговый отбор и сортировка. Проверь результат на крайних случаях — NULL, дубликаты, пустые группы. Свой запрос сразу прогоняешь автопроверкой в интерактивной SQL-песочнице на реальной базе (SQLite и PostgreSQL 16 прямо в браузере).

Разбор темы с примерами — в гайде «gaps-and-islands в SQL». Хочешь системно с нуля — пройди бесплатный курс «SQL с нуля».

Решить в интерактивной SQL-песочнице → ← Все SQL-задачи