各位大哥們,小弟現在遇到一個难题,我的表的结构是这样的,
D_FLG1 -- D_FLG24 NUMBER(10,0),
DAT1 -- DAT24 NUMBER(10,0),
D_FLG1代表一个标记,DAT1代表数据,这个表存的是这二十四小时的数据,我现在需要计算比如从1点到10点的数据,需要把DAT1到DAT10数据累加起来除以10,
但是这个数据是要根据这个D_FLG标记来计算的,如果D_FLG标记这是一条无效的数据,那么不做为累加的数据。
举个例子,从一点到5点的数据,三点的数据无效,那么就应该是(DAT1+DAT2+0+DAT4+DAT5)/4,
请教各位如何在sql中实现这样的呢,谢谢各位了。
------解决方案--------------------
- SQL code
select sum(DAT)/count(*) from ( select D_FLG1 as D_FLG, DAT1 as DAT from table where ... union all select D_FLG2 as D_FLG, DAT2 as DAT from table where ... union all ...)where D_FLG...
------解决方案--------------------
楼主参考一下:
SQL> select * from flag;
FLAG DATA
---------- ----------
2 100
2 100
2 100
2 100
1 100
2 105
2 105
1 100
1 100
2 100
已选择10行。
flag=2表示有效;
flag=1表示无效.
rownum是你要取的小时数,你也可以改为区间形式。
SQL> select sum(data*decode(flag,2,1,1,0,1))/sum(decode(flag,2,1,1,0,1)) result from flag where rownum<=4;
RESULT
----------
100
SQL> select sum(data*decode(flag,2,1,1,0,1))/sum(decode(flag,2,1,1,0,1)) result from flag where rownum<=7;
RESULT
----------
101.666667
SQL> select sum(data*decode(flag,2,1,1,0,1))/sum(decode(flag,2,1,1,0,1)) result from flag where rownum<=10;
RESULT
----------
101.428571