Совокупные значения меток времени к соответствующему дню в данном часовом поясе - PullRequest
0 голосов
/ 27 ноября 2018

published - это timestamp with time zone, сохраненное как UTC.
gps_coordinates - это geography(Point,4326).

SELECT
    ST_MakeLine(pp.Gps_Coordinates::geometry ORDER BY pp.Published) As DailyRoute,
    pp.Published::date As DayOf
FROM xxxx As pp
WHERE pp.Id = 'xxxxxxxx'
GROUP BY DayOf

Я пытаюсь получить все данные для идентификатора за день, но вчасовой пояс человека, который его запросил, поэтому, если в CST все, что произошло между 00:00:00 CST и 23:59:59 CST, или если в EST все, что произошло между 00:00:00 EST и 23:59:59 EST.

Каков наилучший способ переработать этот запрос, чтобы получить данные с использованием этой информации?

Когда я попытался:

SELECT
    ST_MakeLine(pp.Gps_Coordinates::geometry ORDER BY pp.Published) As DailyRoute,
    pp.Published::date AT TIME ZONE 'CST'  As DayOf
FROM xxxx As pp
WHERE pp.Id = 'xxxxxxxx'
GROUP BY DayOf

День недели приводит к 2018-11-25 18:00:00, это не то, что я хочу.Я хочу сгруппировать все по дням в зависимости от времени суток в местном часовом поясе.

1 Ответ

0 голосов
/ 27 ноября 2018

Я хочу сгруппировать все по дням, основываясь на времени суток в местном часовом поясе.

Если под "местным часовым поясом" вы подразумеваете предоставленное пользователем 'CST ', затем используйте:

(pp.Published AT TIME ZONE 'CST')::date AS DayOf

Вместо

pp.Published::date AT TIME ZONE 'CST' As DayOf

Если вы сначала приведете к date, вы получитедата в соответствии с настройкой timezone текущего сеанса (show timezone;).Следующая конструкция AT TIME ZONE сначала приводит указанное значение date к timestamptz (timestamp with time zone) , представляющему 00:00 данной даты для текущей настройки timezone, перед вычислением соответствующегоtimestamp without time zone для данного часового пояса ('CST') - не то, что вы хотите.

Похожие:

...