SQL: Дата среза и поздняя регистрация событий — Ноябрьские заказы на фиксированный момент
Практическая задача по SQL на тему «Дата среза и поздняя регистрация событий». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Ноябрьские заказы на фиксированный момент
Что уже дано
Уже заполнена orders(order_id INTEGER PRIMARY KEY,client_id INTEGER NOT NULL,amount INTEGER NOT NULL,occurred_at TEXT NOT NULL,recorded_at TEXT NOT NULL). ID положительные INTEGER; order_id уникален. amount — целые копейки от 0 до 2 000 000 000. Метки — валидные UTC YYYY-MM-DD HH:MM:SS с точностью до секунды между 2020 и 2025 годами; recorded_at >= occurred_at, NULL нет. Журнал append-only, recorded_at — истинный момент поступления. Разные order_id являются самостоятельными заказами, даже при равных остальных полях. До 1000 строк; суммы помещаются в INTEGER64.
Что нужно сделать
Для ноябрьских событий occurred_at в [2024-11-01 00:00:00,2024-12-01 00:00:00) оставьте только записи с recorded_at строго меньше 2024-12-01 12:00:00. Для каждого client_id среди оставшихся строк посчитайте orders_count и total_amount. Клиентов без подходящих заказов не выводите.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 3 столбцов в указанном порядке и с этими именами: client_id, orders_count, total_amount. Все столбцы INTEGER без NULL. Сортировка: client_id ASC. Одна строка на участвующего клиента; пустая выборка даёт пустой результат. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO orders VALUES (1,10,100,'2024-11-01 00:00:00','2024-11-01 00:00:00'),(2,10,100,'2024-11-30 23:59:59','2024-12-01 11:59:59'),(3,20,300,'2024-11-10 00:00:00','2024-12-01 12:00:00'),(4,30,400,'2024-11-15 00:00:00','2024-12-02 00:00:00');
- Вывод
10|2|200
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
