В таблице events(user_id, created_at) колонка created_at типа timestamptz (события записаны в UTC). Нужно посчитать DAU по дням в таймзоне Москвы (и не зависеть от таймзоны сессии). Какой бакет правильный?
A
DATE_TRUNC('day', created_at)B
DATE_TRUNC('day', created_at::timestamp)C
DATE_TRUNC('day', created_at AT TIME ZONE 'Europe/Moscow')D
DATE_TRUNC('day', created_at AT TIME ZONE 'UTC')Правильный ответ. Для локальных дней сначала переведите метку времени в нужную таймзону, затем применяйте
DATE_TRUNC.Разбор
Если нужно группировать события по дням в конкретной таймзоне, сначала приведите timestamptz к локальному времени через AT TIME ZONE, а затем бакетируйте DATE_TRUNC('day', ...). Иначе результат может зависеть от настроек таймзоны сессии или останется в UTC.
Проверь себя · 1/3разбор после ответа
Какое утверждение верно про
DATE_TRUNC('week', ts) в PostgreSQL (где ts типа timestamp)?Ещё вопросы по теме «Даты и время»
- В таблице `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)`?
- Все вопросы по «Даты и время» →