Вступить в клуб →
средняявопросSQL и проверка данных

Сверка за январь недосчитывает заказы последнего дня месяца

Вы сверяете число заказов за январь с отчётом сервиса. Колонка created_at имеет тип timestamp, время в ней хранится с точностью до секунды.

SELECT count(*) FROM orders
WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';

Запрос возвращает 12 480, отчёт сервиса — 12 655. Все недостающие заказы созданы 31 января.

В чём причина расхождения?

  • Верхняя граница разворачивается в '2026-01-31 00:00:00', поэтому заказы 31 января, созданные после полуночи, в диапазон не попадают: границу задают как `created_at < '2026-02-01'`
  • BETWEEN не включает границы диапазона, поэтому из выборки выпадают и первое, и последнее число месяца: включающий вариант пишется парой условий с >= и <=
  • Сравнивать timestamp со строковым литералом нельзя: база молча отбрасывает строки, которые не смогла привести к типу даты, и нужен явный CAST обеих границ
  • count(*) не учитывает строки, у которых есть NULL хотя бы в одной колонке, а у заказов 31 января ещё не заполнена дата доставки

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела