【发布时间】:2017-03-15 19:31:15
【问题描述】:
每天查询 InfluxDB 特定时间的最佳方法是什么,例如,我有一个系列有签入/签出活动,我需要在上个月每天下午 2 点到下午 3 点之间查看它们,我知道在查询语言上没有直接的方法 - 当前版本 1.2 - 不确定是否有解决方法或什么?
【问题讨论】:
标签: influxdb
每天查询 InfluxDB 特定时间的最佳方法是什么,例如,我有一个系列有签入/签出活动,我需要在上个月每天下午 2 点到下午 3 点之间查看它们,我知道在查询语言上没有直接的方法 - 当前版本 1.2 - 不确定是否有解决方法或什么?
【问题讨论】:
标签: influxdb
我一直在寻找相同的内容并找到了您的问题。正如您所说,语法似乎不允许这样做。
我最近的尝试是尝试使用正则表达式一段时间 WHERE clausule,目前 InfluxDB 不支持。
所以这应该是答案,我不会发布答案就这么说。
但是,在处理不同的问题时,我找到了一种在您的特定情况下可能对您有帮助也可能没有帮助的方法。这是一个不是很好的解决方法,但它似乎可以工作在您可以制定聚合/选择您想在给定时间看到的内容的情况下这样你最终每小时就有一个值。例如,(给定人员在该小时内签到签出的平均/最大/计数数,这可能是您要查找的内容,或者您可以使用它来确定您希望他们单独查询查看的日期那里发生了什么)。
例如,我想获取每天上午 00:00 到 06:00 的用电量测量值。我创建了第一个子查询,将测量值分组从给定日期的 00:00 开始除以 6 小时。然后在主查询中,我按 24 小时分组并选择第一个值。像这样
SELECT first("mean") FROM (SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5' AND time > '2017-01-01' GROUP BY time(6h) ) WHERE time > '2017-01-01' GROUP BY time(24h)
如果您想要下午 2-4 点,即 14:00-16:00,您需要先在子查询中按 2 小时分组,然后将集合偏移 14 小时,使其从 14:00 开始。
SELECT first("mean") FROM ( SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5' AND time > '2017-01-01T14:00:00Z' GROUP BY time(2h) ) WHERE time > '2017-01-01T14:00:00Z' GROUP BY time(24h,14h)
只是为了检查它。在我的 1.2 InfluxDB 中,这是最终结果:
Energy
time first
2017-01-01T14:00:00Z 86.41747572815534
2017-01-02T14:00:00Z 43.49722222222222
2017-01-03T14:00:00Z 81.05416666666666
子查询返回:
Energy
time mean
2017-01-01T14:00:00Z 86.41747572815534
2017-01-01T16:00:00Z 91.46879334257974
2017-01-01T18:00:00Z 89.14027777777778
2017-01-01T20:00:00Z 94.47434119278779
2017-01-01T22:00:00Z 89.94305555555556
2017-01-02T00:00:00Z 86.29542302357837
2017-01-02T02:00:00Z 92.2625
2017-01-02T04:00:00Z 89.93619972260748
2017-01-02T06:00:00Z 87.78888888888889
2017-01-02T08:00:00Z 50.790277777777774
2017-01-02T10:00:00Z 0.6597222222222222
2017-01-02T12:00:00Z 0.10957004160887657
2017-01-02T14:00:00Z 43.49722222222222
2017-01-02T16:00:00Z 86.0610263522885
2017-01-02T18:00:00Z 86.59778085991678
2017-01-02T20:00:00Z 91.56527777777778
2017-01-02T22:00:00Z 90.52565880721221
2017-01-03T00:00:00Z 86.79166666666667
2017-01-03T02:00:00Z 87.15533980582525
2017-01-03T04:00:00Z 89.47988904299584
2017-01-03T06:00:00Z 91.58888888888889
2017-01-03T08:00:00Z 41.67732962447844
2017-01-03T10:00:00Z 16.216366158113733
2017-01-03T12:00:00Z 25.27739251040222
2017-01-03T14:00:00Z 81.05416666666666
如果需要 13:00-15:00,则需要将上例中的子查询偏移 1h。
14:00-15:00:
SELECT first("mean") FROM ( SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5' AND time > '2017-01-01T14:00:00Z' GROUP BY time(1h) ) WHERE time > '2017-01-01T14:00:00Z' GROUP BY time(24h,14h)
希望这会有所帮助:)
【讨论】: