Вы строите дневной бакет DATE_TRUNC('day', created_at) AS day. Какое выражение даст ключ для JOIN на «тот же день прошлой недели»?
A
DATE_TRUNC('day', created_at) - INTERVAL '1 day'B
DATE_TRUNC('day', created_at) - INTERVAL '1 week'C
DATE_TRUNC('week', created_at) - INTERVAL '1 week'D
DATE_TRUNC('day', created_at) + INTERVAL '1 week'Правильный ответ. Для сопоставления по дням сдвигайте уже усечённый дневной бакет на
INTERVAL '1 week'.Разбор
Если ключом является начало дня (DATE_TRUNC('day', ...)), то для периода-к-периоду удобнее сдвигать этот ключ: - INTERVAL '1 week'. Сдвиг недельного бакета (DATE_TRUNC('week', ...)) даст начало недели, а не тот же день недели.
Проверь себя · 1/3разбор после ответа
В таблице
users(signup_at) поле signup_at типа date. Нужно получить дату «через один календарный месяц» после регистрации. Какое выражение корректнее?Ещё вопросы по теме «Даты и время»
- В таблице `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)`?
- Все вопросы по «Даты и время» →