当前位置: 代码迷 >> Oracle技术 >> 求一条 sql,该如何处理
  详细解决方案

求一条 sql,该如何处理

热度:13   发布时间:2016-04-24 08:27:06.0
求一条 sql
两张表
第一张 1m表
datetime price db  
2012-6-11 12:00:01 55 158
2012-6-11 12:00:35 56 199
2012-6-11 12:01:22 58 124
2012-6-11 12:01:29 58 195
2012-6-11 12:01:55 59 250

第二张 2m表
open high low close bal db2


要求从第一张表的数据中 生成第二张表
第一张表是实时表,第二张表是每3分钟统计表

open 是指每二分钟开始的第一个价格
high 二分钟里最高价
low 二分钟里最低价
close 二分钟结束时价 
bal 二分钟里平均价
db2 第一张表db的二分钟结束时最后一个数据

第一张表时有一个小时的报价数据,第二张表每一条都是第一张表的3分钟统计

求生成第二张表的sql

------解决方案--------------------
按楼主提供的结构及数据进行了测试,统计间隔为3分钟。
SQL code
select distinct t2.dt,       max(t1.price) over(partition by t2.dt) high,       min(t1.price) over(partition by t2.dt) low,       trunc(avg(t1.price) over(partition by t2.dt), 2) bal,       min(t1.price) keep(dense_rank first order by t1.datatime) over(partition by t2.dt) open,       max(t1.price) keep(dense_rank last order by t1.datatime) over(partition by t2.dt) close,       max(t1.db) keep(dense_rank last order by t1.datatime) over(partition by t2.dt) db2  from t1 ,(  select to_date('2012-06-11 13:00:00', 'yyyy-mm-dd hh24:mi:ss') -       (level - 1) * 3 / 1440 dt  from dualconnect by level <= 21  ) t2 where t1.datatime>=t2.dt-3/1440 and t1.datatime<t2.dt
  相关解决方案