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