同表多次查询不同时段数据的oracle创建视图方法
创始人
2024-07-17 18:50:49
0

oracle创建视图的方法相信大家都有一定的了解,下面为您介绍的是同表多次查询不同时段数据的oracle创建视图方法,希望对您有所启迪。

项目开发过程中有一个小时流量表,分别记录每个小时每个通道的流量,简化字段如下(只保留有效字段):
 NAME   Null?Type
------------------------------- --------- -----
IDNUMBER(19,0)
REPORT_TIME DATE
SEND_NUM    NUMBER(19,0)
SUCCESS_NUM NUMBER(19,0)
 
现在需要创建一个视图,字段如下:通道id,上一个小时发送成功率,上第二个小时发送成功率,上第三小时发送成功率,比如:现在是14点,则需要13点,12点,11点这三个时段的分别发送成功率,如果send_num 为0,或者null,则结果为null。

oracle创建视图过程:

1. 时间段的处理:
to_char(sysdate,'hh24')-to_char(report_time,'hh24') 可以获取小时差,根据结果为1,2,3 三种情况分别查询结果。可以使用case ... when... then... end 判断。这里有一种情况需要注意:后面一天的小时为00 ,前一天的小时为23时,需要特殊处理,否则出现负数,这里使用 +24 转换为正数。这样完成小时差的比较。

2. send_num 如果为null或者0时 作为除数的情况:
可以先处理send_num,如果为null或者0,直接不做计算处理。

3.列出完整的查询语句:

  1. select  vmhr.v_mo,  
  2. vmhr.org_code,  
  3. case decode(sign(to_char(sysdate,'hh24')-to_char(report_time,'hh24')),-1,to_char  (sysdate,'hh24')-to_char(report_time,'hh24')+24,to_char(sysdate,'hh24')-to_char(report_time,'hh24')) when 1 then (select decode(nvl(send_num,0),0,null,nvl(success_num,0)/nvl(send_num,1)) from channel_flux where v_mo=vmhr.v_mo) end last_1_suss_rate,  
  4.  
  5. case decode(sign(to_char(sysdate,'hh24')-to_char(report_time,'hh24')),-1,to_char(sysdate,'hh24')-to_char(report_time,'hh24')+24,to_char(sysdate,'hh24')-to_char(report_time,'hh24')) when 2 then (select decode(nvl(send_num,0),0,null,nvl(success_num,0)/nvl(send_num,1)) from channel_flux where v_mo=vmhr.v_mo) end last_2_suss_rate,  
  6.  
  7. case decode(sign(to_char(sysdate,'hh24')-to_char(report_time,'hh24')),-1,to_char(sysdate,'hh24')-to_char(report_time,'hh24')+24,to_char(sysdate,'hh24')-to_char(report_time,'hh24')) when 3 then (select decode(nvl(send_num,0),0,null,nvl(success_num,0)/nvl(send_num,1)) from channel_flux where v_mo=vmhr.v_mo) end last_3_suss_rate  
  8. from channel_flux vmhr  

说明:sign(var) 是oracle内置函数,得到变量var的正负值,小于0 返回 -1,等于0返回0,大于0返回1. decode是oracle的内置函数,可以做简单的判断;case...when...then ... end 判断条件,表示case 变量 when 满足条件 then 执行语句 end 具体的使用可以查询oracle的帮助文档。

4.完成查询后,创建视图:
create view as .... ,补上上面的查询语句,完成视图需求。
 

 

 

【编辑推荐】

Oracle创建表和索引

oracle重建索引的实现

全面解析Oracle文件系统

ORACLE系统表和数据字典视图

深度解析Oracle ERP系统模块

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...