Запросите InfluxDB для определенных часов каждый день, которые попадают в разные дни из-за UTC и моего часового пояса - PullRequest
0 голосов
/ 12 октября 2019

Я запрашиваю InfBDB для создания графика в графане. Influxdb содержит солнечную энергию кВт с отметкой времени каждые 5 секунд. Я хочу агрегировать солнечное производство с 4 вечера до 9 вечера каждый день. В UTC это становится с 2300 до 0400. Я могу сделать с 2300 до 0000 и отдельно от 0000 до 0400, но я не знаю, как добавить их вместе с графаной. Или было бы неплохо сделать 2300-0400 в одном запросе. Вот мои 2 запроса для 2300 до 0000 и от 0000 до 0400:

SELECT first("integral") FROM (  SELECT integral("kW",1h) FROM "solar"  WHERE TIME >'2019-10-04T23:00:00Z' GROUP BY time(1h))  WHERE TIME >'2019-10-04T23:00:00Z' GROUP BY time(24h,23h)
SELECT first("integral") FROM (  SELECT integral("kW",1h) FROM "solar"  WHERE TIME >'2019-10-05' GROUP BY time(4h))  WHERE TIME >'2019-10-05' GROUP BY time(24h)

Обновление: Следующее работает в течение 1 часа желаемого промежутка времени:

SELECT first("integral") FROM (  SELECT integral("kW",1h) FROM "solar"  WHERE TIME >'2019-10-04 16:00:00' GROUP BY time(1h))  WHERE TIME >'2019-10-04 16:00:00' GROUP BY time(24h,16h) tz('America/Los_Angeles')

однако, если я увеличу временной интервал до 2 ч, он вернет неправильный результат:

SELECT first("integral") FROM (  SELECT integral("kW",1h) FROM "solar"  WHERE TIME >'2019-10-04 16:00:00' GROUP BY time(2h))  WHERE TIME >'2019-10-04 16:00:00' GROUP BY time(24h,16h) tz('America/Los_Angeles') 

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете использовать часовой пояс TZ пункт https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/#the-time-zone-clause

Вы также можете начать в 23:00 группу с time(5h) (которая в основном будет включать данные со следующего дня и сохранять их в 23:00на текущий день), а затем принять последний (вместо первого) результат за 24-часовой период.

Так что-то вроде (обратите внимание на дополнительный as kW псевдоним)

SELECT last("kW") FROM (  SELECT integral("kW",1h) as kW FROM "solar"  WHERE TIME >'2019-10-04T23:00:00Z' GROUP BY time(5h))  WHERE TIME >'2019-10-04T23:00:00Z' GROUP BY time(24h)

Или сделайте выше + TZ.
Не уверен, что именно будет работать в вашем случае использования.

...