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