В таблице events(created_at) нужно выбрать события за последние 7 дней с точностью до текущего момента (включая сегодняшние, ещё не завершённые сутки). Какое условие в WHERE корректнее?

AWHERE created_at >= current_timestamp - INTERVAL '7 days'
BWHERE created_at >= current_date - INTERVAL '7 days'
CWHERE DATE_TRUNC('day', created_at) >= current_timestamp - INTERVAL '7 days'
DWHERE created_at <= current_timestamp - INTERVAL '7 days'
Правильный ответ. Для скользящего окна «последние 7 дней до текущего момента» используют current_timestamp - INTERVAL '7 days'.

Разбор

current_timestamp возвращает момент с временем, поэтому created_at >= current_timestamp - INTERVAL '7 days' отбирает события за последние 7×24 часа. current_date обнуляет время до полуночи и подходит для календарных периодов («с начала дня семь дней назад»), но смещает границу окна. Вариант с DATE_TRUNC сравнивает день с моментом времени и теряет внутренний интервал. Условие <= берёт всё старше 7 дней, то есть зеркально неправильное окно.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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