数据实时上传到数据库里面,每一天不定时会产生很多数据,需要查询在一定连续时间内满足条件的数据。
  比如:在表t_A里面有时间、数量、机组、负荷等字段,负荷有200-260,260-300,300-330三种情况,设备运转实时上传数据,需要查询出连续超过30分钟负荷稳定在上述三种情况之中一种的所有数据,然后对30分钟之后的数据进行求平均值,比如说机组在2016-09-01 13:10:12到2016-09-01 13:55:12的时间范围内都在负荷260-300下运行,稳定时间有45分钟,超过30分钟,那么就查询出2016-09-01 13:40:12到2016-09-01 13:55:12时间内的数据的平均值,即查询30分钟之后的15分钟的数据的平均值,请问怎么做?一天之内可以有多段时间满足超过30分钟稳定期的数据,都要查询出来。

解决方案 »

  1.   

    这个数据确实是有问题的,实际上半个小内会有很多条数据,但意思是一样的,一个机组对应多个原煤仓id,实际上是要展示每个原煤仓id在其机组负荷的稳定期内的数据。大致意思你差不多明白了,我现在基本上都没有思路。
      

  2.   

    如果出现了不稳定数据,怎么对数据进行取舍?q我吧 212646490
    时间背景为绿色的对应的amount,mt,aar就是需要计算并展示在页面的数据,amount直接求和,mt和aar进行加权平均
      

  3.   

    -- Create table
    create table COMPARE_TEST_REALDATA
    (
      ci_name VARCHAR2(200),
      time    DATE,
      value   NUMBER(16,4),
      sid     VARCHAR2(200)
    );
    -- Add comments to the table 
    comment on table COMPARE_TEST_REALDATA
      is '模仿实时数据库的数据';
    -- Add comments to the columns 
    comment on column COMPARE_TEST_REALDATA.ci_name
      is '指标名称';
    comment on column COMPARE_TEST_REALDATA.time
      is '时间';
    comment on column COMPARE_TEST_REALDATA.value
      is '点值';
    comment on column COMPARE_TEST_REALDATA.sid
      is 'SID';insert into COMPARE_TEST_REALDATA(CI_NAME,TIME,VALUE,SID)
    SELECT 'FH',SYSDATE-level/24/60,round(dbms_random.value(90,110),4),'WDR'
    FROM DUAL
    connect by level <= 24*60
    select min(aa.time),max(aa.time),count(1) from 
    (select a.*,rownum rna from (select * from COMPARE_TEST_REALDATA order by time) a) aa 
    left join (select c.*,rownum rnb from (select b.* from COMPARE_TEST_REALDATA b 
              where b.value >= 100 - 100 * 0.05
              and b.value <= 100 + 100 * 0.05
              order by time) c) bb
    on aa.time = bb.time
    where rnb is not null
    group by (rna-rnb)
    having count(1) > 5
    order by min(aa.time)