2017-03-15 76 views
2

每天查詢InfluxDB特定時間的最佳方法是什麼,例如,我有一個系列有checkin/checkout活動,我需要在每小時2PM至3PM之間查看我知道在查詢語言中沒有直接的方法 - 當前版本1.2-不確定是否有解決方法或者其他什麼?每天查詢特定小時的InfluxDB

回答

4

我一直在尋找相同的,發現你的問題。正如你所說,語法似乎不允許這樣做

我最近的嘗試是試圖使用一個正則表達式的時間WHERE clausule,目前不支持InfluxDB。

所以這應該可能是答案,我不會發表一個答案,只是說。

但是,在不同的問題上工作,我發現一種方式,可能或不會幫助你在你的具體情況。這是一個解決方法這是不是很好,但它似乎工作的情況下,你可以制定一個聚合/選擇你想看到在給定的小時,以便最終有一個值每個小時。例如,(對於某個給定人員,在該小時內的checkin-checkout的平均值/最大值/計數值,這可能是您正在查找的內容,或者您​​可能用於確定您希望他們單獨查詢以查看的日期那裏發生了什麼)。

例如,我想從上午的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小時子查詢,然後通過offseting的14H設置,以便它開始於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,你需要以抵消子查詢前面例子中到1小時。

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

希望這有助於:)

+0

我不能這樣用骨料,我有不同的情況,但我給+1因爲它可能會幫助別人;) –