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 · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи