SQL: Скользящие показатели по календарным периодам — Семидневная сумма и неполное начало ряда
Практическая задача по SQL на тему «Скользящие показатели по календарным периодам». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Семидневная сумма и неполное начало ряда
Что уже дано
Таблица daily_revenue(rev_date TEXT PRIMARY KEY, revenue INTEGER NOT NULL) содержит ровно все 30 дат июня 2024, по одной строке в день, без пропусков. Даты YYYY-MM-DD, revenue от 0 до 100000; нулевой день тоже записан.
Что нужно сделать
Для каждого дня покажите сумму выручки за текущий и шесть предыдущих календарных дней. Добавьте window_days_count — число доступных календарных дней в этом окне. В начале июня используйте только доступную историю, сохранив эти неполные строки.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 4 столбцов в указанном порядке и с этими именами: rev_date, revenue, rolling_7d_sum, window_days_count. rev_date — TEXT; остальные три столбца — INTEGER, без NULL. Сортировка: rev_date ASC. В результате всегда 30 строк. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO daily_revenue VALUES ('2024-06-01',100),('2024-06-02',0),('2024-06-03',0),('2024-06-04',0),('2024-06-05',0),('2024-06-06',0),('2024-06-07',0),('2024-06-08',50),('2024-06-09',0),('2024-06-10',0),('2024-06-11',0),('2024-06-12',0),('2024-06-13',0),('2024-06-14',0),('2024-06-15',0),('2024-06-16',0),('2024-06-17',0),('2024-06-18',0),('2024-06-19',0),('2024-06-20',0),('2024-06-21',0),('2024-06-22',0),('2024-06-23',0),('2024-06-24',0),('2024-06-25',0),('2024-06-26',0),('2024-06-27',0),('2024-06-28',0),('2024-06-29',0),('2024-06-30',0);- Вывод
2024-06-01|100|100|1 2024-06-02|0|100|2 2024-06-03|0|100|3 2024-06-04|0|100|4 2024-06-05|0|100|5 2024-06-06|0|100|6 2024-06-07|0|100|7 2024-06-08|50|50|7 2024-06-09|0|50|7 2024-06-10|0|50|7 2024-06-11|0|50|7 2024-06-12|0|50|7 2024-06-13|0|50|7 2024-06-14|0|50|7 2024-06-15|0|0|7 2024-06-16|0|0|7 2024-06-17|0|0|7 2024-06-18|0|0|7 2024-06-19|0|0|7 2024-06-20|0|0|7 2024-06-21|0|0|7 2024-06-22|0|0|7 2024-06-23|0|0|7 2024-06-24|0|0|7 2024-06-25|0|0|7 2024-06-26|0|0|7 2024-06-27|0|0|7 2024-06-28|0|0|7 2024-06-29|0|0|7 2024-06-30|0|0|7
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
