Нужно отобрать заказы за текущий календарный месяц по created_at (тип timestamp). Какое условие в WHERE корректно и обычно лучше использует индекс по created_at?
A
WHERE created_at >= current_date - INTERVAL '30 days'B
WHERE created_at >= DATE_TRUNC('month', current_date) AND created_at < DATE_TRUNC('month', current_date) + INTERVAL '1 month'C
WHERE DATE_TRUNC('month', created_at) = DATE_TRUNC('month', current_date)D
WHERE created_at >= DATE_TRUNC('month', current_date) + INTERVAL '1 month'Правильный ответ. Для календарного месяца используйте диапазон
[start_of_month, start_of_next_month) без функции на колонке.Разбор
Выражение DATE_TRUNC('month', created_at) = ... часто заставляет СУБД применять функцию к каждой строке и может мешать использовать индекс. Диапазон created_at >= start AND created_at < start + INTERVAL '1 month' обычно быстрее и однозначно задаёт границы месяца.
Проверь себя · 1/3разбор после ответа
Какое описание лучше всего соответствует типу
timestamptz в PostgreSQL?Ещё вопросы по теме «Даты и время»
- В таблице `events(user_id, created_at)` поле `created_at` типа `timestamp`. Как посчитать количество событий по дням?
- Есть таблица `orders(created_at, amount)`, где `created_at` типа `timestamp`. Как посчитать выручку по месяцам?
- В таблице `events(created_at)` нужно выбрать события за последние 7 дней относительно текущего момента (`current_timestamp`). Какое условие в `WHERE` корректнее?
- Как получить начало текущей недели (недельный бакет) по текущей дате в PostgreSQL?
- Колонка `created_at` имеет тип `timestamp`. Какой тип данных вернёт `DATE_TRUNC('day', created_at)`?
- Все вопросы по «Даты и время» →