2017-07-29 127 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;