数据实时上传到数据库里面,每一天不定时会产生很多数据,需要查询在一定连续时间内满足条件的数据。
比如:在表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分钟稳定期的数据,都要查询出来。
比如:在表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分钟稳定期的数据,都要查询出来。
时间背景为绿色的对应的amount,mt,aar就是需要计算并展示在页面的数据,amount直接求和,mt和aar进行加权平均
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)