首页 > 解决方案 > 由于 UTC 和我的时区,每天查询 InfluxDB 的特定时间,这些时间跨越不同的日子

问题描述

我正在查询 influxdb 以在 grafana 中生成图表。Influxdb 包含 kW 太阳能发电量,每 5 秒有一个时间戳。我想汇总每天下午 4 点到 9 点的太阳能发电量。在 UTC 中,这变为 2300 到 0400。我可以做 2300 到 0000 和单独的 0000 到 0400,但我不知道如何将这些与 grafana 一起添加。或者在一个查询中执行 2300-0400 会很好。这是我对 2300 到 0000 和 0000 到 0400 的 2 个查询:

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') 

标签: timeintervalsgrafanainfluxdb

解决方案


您可以使用时区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。
不确定在您的用例中究竟有什么用。


推荐阅读