Нужно отобрать события ровно за вчерашний календарный день по created_at типа timestamp, чтобы не задвоить границы при ежедневном запуске. Какое условие в WHERE лучше?

AWHERE created_at >= current_timestamp - INTERVAL '24 hours' AND created_at < current_timestamp
BWHERE created_at > current_date - INTERVAL '1 day' AND created_at <= current_date
CWHERE created_at >= current_date - INTERVAL '1 day' AND created_at < current_date
DWHERE created_at BETWEEN current_date - INTERVAL '1 day' AND current_date
Правильный ответ. Для календарного дня используйте полуинтервал [start, end) на базе current_date.

Разбор

Удобнее задавать границы как created_at >= start AND created_at < end. Тогда событие ровно на границе (например, в 00:00:00) попадёт только в один день и не будет задваиваться, в отличие от BETWEEN, который включает обе границы.

Проверь себя · 1/3разбор после ответа
В таблице events(user_id, created_at) колонка created_at типа timestamptz (события записаны в UTC). Нужно посчитать DAU по дням в таймзоне Москвы (и не зависеть от таймзоны сессии). Какой бакет правильный?
Тренировать SQL в Telegram

Ещё вопросы по теме «Даты и время»