Выбор ответа Middle SQL дата-инженера обновлено
ROWS против RANGE на ряду с пропусками
Вопрос
Дневная выручка хранится только за дни с продажами, некоторые дни пропущены. Нужно скользящее среднее за 7 календарных дней. Что выбрать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW или достроить даты generateseries. ROWS считает строки: при пропусках 7 строк могут охватить две недели.
Варианты ответа
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW: шесть строк до текущей и она сама, это и есть 7 днейROWS BETWEEN 7 PRECEDING AND CURRENT ROW, чтобы с запасом захватить и пропущенный деньRANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROWили достроить датыgenerate_seriesправильный ответ- Рамку не указывать: при ORDER BY по дате окно по умолчанию охватывает 7 последних дней
Разбор
ROWS считает строки: при пропусках 7 строк могут охватить две недели. RANGE с интервалом считает по значению даты, а ряд через generate_series вдобавок учтёт пропущенные дни как нули (это важно, если среднее должно делиться на 7). ROWS 7 PRECEDING даёт 8 строк. Рамка по умолчанию даёт нарастающий итог, а не 7 дней.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.