Пропущенные номера чеков по кассам

Средняя gaps-and-islands X5 Group

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

Каждая касса ведёт собственную сквозную нумерацию чеков (receipt_no). Из-за сбоев часть номеров потерялась. Найди пропущенные диапазоны номеров внутри каждой кассы и выведи их как интервалы: register_id, gap_start (первый пропущенный номер), gap_end (последний пропущенный номер). Пропуск из одного номера показывай как gap_start = gap_end. Отсортируй по register_id, затем по gap_start.

Схема данных

CREATE TABLE receipts (
  register_id  INTEGER NOT NULL,
  receipt_no   INTEGER NOT NULL,
  amount       REAL    NOT NULL
);

Темы

gaps-and-islands lead window-functions missing-values distinct

Подсказки

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

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

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

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

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

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