У меня проблема с сортировкой и запросом данных со смещением часового пояса.
У меня есть PostgreSQL + TimescaleDB, где у меня есть данные временных рядов. Цель состоит в том, чтобы получить дневные максимумы на основе местного часового пояса. Мои данные в UT C, но запрос должен быть в местном часовом поясе, поскольку мои накопительные счетчики сбрасываются по местному времени.
Цель должна иметь результат, как показано ниже
id | time | dailymax | name
-------+---------------------+------------------+------------------------
10001 | 2020-01-05 | 0 | Property1
10002 | 2020-01-05 | 20930.3490579984 | Property2
10003 | 2020-01-05 | 28347.1322223556 | Property3
10001 | 2020-01-04 | 57872.3274949118 | Property1
10002 | 2020-01-04 | 101159.612050399 | Property2
10003 | 2020-01-04 | 34113.226521315 | Property3
10001 | 2020-01-03 | 0 | Property1
10002 | 2020-01-03 | 17386.2914203308 | Property2
10003 | 2020-01-03 | 160599.774657208 | Property3
My Наилучшее предположение до сих пор касалось запроса, приведенного ниже, но он также дает мне записи о неправильных днях и занимает много времени для выполнения
SELECT table.id, CAST(datetime AS DATE) AT TIME ZONE 'America/New_York' as time, MAX(value) AS value, map.tagname FROM table
JOIN map ON table.id = map.id
WHERE table.id in(10003,10029,10008,10036,10007) AND datetime AT TIME ZONE 'UTC' >= '2019-12-30T16:09:32.080Z' AND datetime AT TIME ZONE 'UTC' < '2020-01-06T16:09:32.080Z'
GROUP BY table.id, map.tagname, time
ORDER BY time DESC;
С TimescaleDB пробовал что-то, как показано ниже, также с неудачей
SELECT table.id, to_char(time_bucket('24 hours', datetime) at time zone 'utc', 'YYYY-MM-DD"T"HH24:MI:SS"Z"') as time, max(value) as value, map.name FROM
table JOIN map ON table.id = map.id
WHERE table.id in(10001,10002) AND datetime >= '2020-01-01' AND datetime < '2020-01-10'
GROUP BY time, table.id, map.name ORDER BY time DESC`;