В таблице events(created_at) нужно выбрать события за последние 7 дней с точностью до текущего момента (включая сегодняшние, ещё не завершённые сутки). Какое условие в WHERE корректнее?
A
WHERE created_at >= current_timestamp - INTERVAL '7 days'B
WHERE created_at >= current_date - INTERVAL '7 days'C
WHERE DATE_TRUNC('day', created_at) >= current_timestamp - INTERVAL '7 days'D
WHERE 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 дней, то есть зеркально неправильное окно.
Проверь себя · 1/3разбор после ответа
Для сравнения метрик по неделям нужно получить начало предыдущей недели. Какое выражение вернёт начало предыдущей недели относительно
current_date?Ещё вопросы по теме «Даты и время»
- В таблице `events(user_id, created_at)` поле `created_at` имеет тип отметки времени с долями секунд. Как корректно посчитать количество событий по дням?
- Есть таблица `orders(created_at, amount)`, где `created_at` имеет тип `timestamp`. Как посчитать выручку по месяцам?
- Как получить начало текущей недели (недельный бакет) по текущей дате в PostgreSQL?
- Колонка `created_at` имеет тип `timestamp`. Какой тип данных вернёт `DATE_TRUNC('day', created_at)`?
- В таблице `events(user_id, created_at)` колонка `created_at` типа `timestamptz` (события записаны в UTC). Нужно посчитать DAU по дням в часовом поясе Москвы и не зависеть от часового пояса сессии. Какой бакет правильный?
- Все вопросы по «Даты и время» →