В таблице meter(reading_ts, value) показания счётчика идут с пропусками. Нужно найти 'gaps' — промежутки между соседними показаниями, где разрыв больше 1 часа, и вернуть границы каждого пропуска. Какой подход прямой?
SQLmediummiddle
Проверяет владение SQL: выборки, агрегации, JOIN-ы и оконные функции.
gaps-and-islandslagwindow-functions
Варианты ответа
LAG(reading_ts) OVER (ORDER BY reading_ts) как prev, фильтр где reading_ts - prev > 1 час
SUM(value) OVER (ORDER BY reading_ts RANGE '1 hour') покажет, где накопление прервалось
ROW_NUMBER() минус reading_ts, сгруппировать по разнице — это и есть границы пропусков
GROUP BY по часу от reading_ts и HAVING COUNT(*) = 0 вернёт пустые часы как пропуски
Как разобрать этот вопрос на собеседовании
Начни с разбора схемы: какие таблицы и ключи участвуют, где могут быть NULL и дубли строк. Затем реши, что важнее — JOIN, агрегация с GROUP BY/HAVING, оконная функция или подзапрос. На собеседовании ценят не только правильный результат, но и умение проговорить план запроса и крайние случаи (пустые группы, деление на ноль, фан-аут при JOIN).
На собеседовании по такому вопросу важно не только назвать ответ, но и кратко объяснить, почему он верный.
Тема вопроса — «SQL». Чтобы подготовиться к похожим задачам, отрабатывай их на практике: sql-тренажёр помогает довести навык до автоматизма, а раздел вопросов — увидеть формулировки, которые реально встречаются на интервью аналитика данных.
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
3000+ вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.