各位大哥們,小弟現在遇到一個难题,我的表的结构是这样的,
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中实现这样的呢,谢谢各位了。
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中实现这样的呢,谢谢各位了。
解决方案 »
- PL/SQL登录错误
- 数据字典中的视图在pl/sql developer 中能不能看?
- 如何使用oracle游标遍历select集合
- 段错误 segmentation fault ?
- 一道有点难度的数据库问题
- execute immediate问题
- 用视图里面的SELECT搜出的结果和用视图搜出的结果不一样
- 视图查询和直接查询错误
- 问!
- 关于OCCI问题
- 请教关于oracle查询分类统计的问题
- ------------------------------------------------刪除相同紀錄----------------------------------------------------
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
----------
100SQL> 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.666667SQL> 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