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