2017-07-29 91 views
0

如果我使用的是Oracle,使用rank over函數可以在幾分鐘內解決此問題,但是,這並不是orientdb具有的內容,或者是其路線圖中的內容。按時間間隔對分鐘進行分組

我目前有一個要求,按分鐘級別的時間間隔對屬性和組數據進行平均。

以15分鐘的時間跨度,給了我15條/每分鐘的記錄,我需要能集團在5分鐘內

我的數據結構的間隔數據如下enter image description here

我的最終結果應該是這樣的

AVG(最後)............. | ..... GroupedMinutes


0.00103445 ....... | ...... 5

0.00103441 ....... | ...... 10

0.0010344 ...... ...... | ...... 15個

樣本數據

create class times 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049611',7,29,19,0) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049634',7,29,19,1) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049654',7,29,19,2) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049660',7,29,19,3) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049655',7,29,19,4) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049654',7,29,19,5) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049677',7,29,19,6) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049654',7,29,19,7) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049698',7,29,19,8) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049687',7,29,19,9) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049633',7,29,19,10) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049622',7,29,19,11) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049643',7,29,19,12) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049634',7,29,19,13) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049657',7,29,19,14) 
insert into times (exe, Last, month, day, hour, minute) values ('EXE','0.1049698',7,29,19,15) 
+0

也許通過JavaScript函數的方式,你可以創建它。該函數會生成一個查詢,以每tot分鐘爲單位檢索數據(例如,從start_time到end_time爲5分鐘)並返回[average-group]。 – lsavio

+0

謝謝,這是我目前的發展道路。但是,我想知道是否在數據庫層面有一些東西來促成挑戰。 – OpsEngineer

回答

4

我趕緊寫了一個js函數,MIG HT幫助您開始使用,請記住,它不是最優化的,因爲它不計算不同天之間的平均值:

var g = orient.getGraph(); 
var query = g.command("SQL", "SELECT * FROM times ORDER BY month, day, hour, minute"); 

var avg = 0, group = 0; 
var prev_month, prev_day, prev_hour, prev_minute; 
var record = []; 

for(var i = 0; i < query.length; i++) 
{ 
    var month = query[i].getRecord().field("month").toString(); 
    var day = query[i].getRecord().field("day").toString(); 
    var hour = query[i].getRecord().field("hour").toString(); 
    var minute = parseInt(query[i].getRecord().field("minute").toString()); 

    if((minute == (prev_minute + 1) && day == prev_day && hour == prev_hour && month == prev_month) || i == 0) 
    { 
     avg += parseFloat(query[i].getRecord().field("Last").toString()); 
     group++; 

     if(group >= 5 || group >= (query.length-i)+2) 
     { 
      record.push((avg/group).toString().substring(0,11)); 
      avg = 0; 
      group = 0; 
     } 
    } 
    else 
    { 
     record.push((avg/group).toString().substring(0,11)); 
     avg = 0; 
     group = 0; 

     avg += parseFloat(query[i].getRecord().field("Last").toString()); 
     group++; 

     if(group >= (query.length-i)+2) 
     { 
      record.push((avg/group).toString().substring(0,11)); 
      avg = 0; 
      group = 0; 
     } 
    } 

    prev_month = month; 
    prev_day = day; 
    prev_hour = hour; 
    prev_minute = minute; 
} 

return record; 
相關問題