`
pandong8183
  • 浏览: 57776 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle 巧用 connect by 完成复杂统计

    博客分类:
  • DB
 
阅读更多

近期接到一个复杂统计的需求,对呼叫中心语音接入流水信息做出统计,要求单位时间内按30秒,60秒,300秒分区间统计接入量,用于进行中心话务运营情况分析,考虑了很长时间,开始是考虑使用游标+循环来做,觉得太复杂和耗时,最后用一句SQL实现了,效果如下:

原始表t_yyjrlsk(语音接入流水库),如下,里面的rq(日期),sj(时间)是我分区间统计的目标列

 

 

 

某时间段按30秒统计结果:

 

sql语句如下:

 

select rq,substr(sj,1,6) || 
       (
          case when b.qjks < 10 then '0' || b.qjks
          else '' || b.qjks
          end
       )
       || '~' || substr(sj,1,6) || b.qjjs as sjqj,count(*)
from t_yyjrlsk a
join (select (level - 1) * 30 as qjks,(level * 30 - 1) as qjjs from dual connect by level <= 2) b
on substr(sj,7,2) >= b.qjks and substr(sj,7,2) <= b.qjjs 
where rq >= 20110401 and rq < 20110402 and sj >= '00:00:00' and sj < '03:30:59'
group by rq,substr(sj,1,6),b.qjks,b.qjjs
order by rq,substr(sj,1,6),b.qjks

 

 

某时间段按60秒统计结果:

 

sql语句如下:

 

select rq,substr(sj,1,2)||':'||substr(sj,4,2)||':00~'||substr(sj,1,2)||':'||substr(sj,4,2)||':59' as sjqj,count(*) 
from t_yyjrlsk
where rq >= 20110401 and rq < 20110402 and sj >= '00:00:00' and sj < '03:30:59'
group by rq,substr(sj,1,2),substr(sj,4,2)
order by rq,substr(sj,1,2),substr(sj,4,2)

 

 

某时间段按300秒统计结果:

 

 

 

sql语句如下:

 

select rq,substr(sj,1,2) || ':' || 
       (
          case when b.qjks < 10 then '0' || b.qjks
          else '' || b.qjks
          end
       )       
       || ':00' || '~' || substr(sj,1,2) || ':' || 
       (
          case when b.qjjs < 10 then '0' || b.qjjs
          else '' || b.qjjs
          end
       )   
       || ':59' as sjqj,count(*)
from t_yyjrlsk a
join (select (level - 1) * 5 as qjks,(level * 5 - 1) as qjjs from dual connect by level <= 12) b
on substr(sj,4,2) >= b.qjks and substr(sj,4,2) <= b.qjjs 
where rq >= 20110401 and rq < 20110402 and sj >= '00:00:00' and sj < '03:30:59'
group by rq,substr(sj,1,2),b.qjks,b.qjjs
order by rq,substr(sj,1,2),b.qjks

 

 

分享到:
评论

相关推荐

    oracle connect by 和 分析函数总结.doc

    Oracle的`CONNECT BY`和分析函数是数据库查询中的两种强大工具,主要用于处理复杂的数据结构和进行高级数据分析。本文将深入探讨这两种技术。 ### Oracle `CONNECT BY` 用法总结 `CONNECT BY` 是Oracle SQL中用于...

    Oracle数据库按时间进行分组统计数据的方法

    在Oracle中,除了上述的基本分组,还可以通过`LEVEL`, `CONNECT BY`来实现更复杂的分组,如按时间段分组。`LEVEL`是Oracle中的一个伪列,常用于递归查询,而`CONNECT BY`则用于创建树形结构。在时间操作中,可以结合...

    Oracle中的树状查询(递归查询)

    通过理解和掌握Oracle中的递归查询,我们可以有效地处理层次数据,构建和查询复杂的树形结构,这对于管理和维护数据库中的关系型数据至关重要。无论是权限管理还是业务流程分析,递归查询都是一个强大且不可或缺的...

    oracle的开发技术

    7. **层次查询**:通过CONNECT BY语句,Oracle支持查询数据的层级结构,如组织结构、产品类别等,能够以树状形式展示数据。 8. **管道函数**:管道函数(PIPELINED)允许PL/SQL程序作为一个数据源,通过将数据流...

    Oracle Press - Oracle Database 11g SQL

    10. **高级SQL特性**:如递归查询(CONNECT BY)、分区表、物质化视图、物化查询块、索引组织表等,这些都是提升数据库性能的重要手段。 11. **数据类型**:详述Oracle支持的各种数据类型,如数值型、字符型、日期...

    Mysql+Oracle函数文档

    CONNECT BY`,用于构建复杂的层次查询。 除了这些基础函数,MySQL 和 Oracle 还支持大量的高级特性,例如窗口函数、递归查询、正则表达式等。在实际应用中,开发者可以根据需求选择合适的数据库系统,并熟练运用其...

    oracle书籍

    10. 连接函数:如CONNECT_BY_ROOT和START_WITH,用于构建复杂的树状查询,处理层次结构数据。 11. 正则表达式函数:如REGEXP_LIKE和REGEXP_SUBSTR,提供了强大的文本匹配和提取功能,提高了数据处理的精度。 通过...

    最全的oracle常用命令大全.txt

    当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、startup pfile=参数文件名 带初始化参数文件的启动方式 先读取参数文件,再按参数文件中的设置启动数据库...

    Oracle 10g中的高级SQL函数

    `GROUP BY` 和 `HAVING` 子句是SQL中的基础工具,但在Oracle 10g中,你可以使用 `CUBE()`, `ROLLUP()`, `GROUPING SETS()` 进行多维度分析,创建更复杂的分组。`CONNECT BY` 用于构建层次结构,如组织结构或产品分类...

    Oracle 实战SQL层次查询

    如果需要彻底删除一个节点及其所有子节点,则需要将过滤条件放在`CONNECT BY PRIOR`子句中: ```sql -- 过滤SCOTT用户,但SCOTT的下属ADAMS仍然显示 SELECT LEVEL, LPAD(' ', 2 * LEVEL - 1) || ename AS "Ename", ...

    oracle函数

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以帮助用户进行复杂的数据操作和查询。本篇文章将深入探讨"Oracle函数"这一主题,主要关注描述中的"110种常见函数"。 1. **数学函数**:...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 SYS_CONNECT_BY_PATH...

    oracle高级查询技巧

    WITH子句(也称为公用表表达式,CTE)配合CONNECT BY语句可用于执行递归查询,解决层次结构问题,如组织架构、产品分类树等。 八、游标 游标(Cursor)允许逐行处理查询结果,对于循环处理大量数据或在PL/SQL代码中...

    oracle从入门到精通.pdf

    2. **层次查询**:使用CONNECT BY和START WITH进行层次结构查询。 #### 二、数据库管理 **1. Oracle的构件和组件** - **Oracle架构概述**:包括实例和数据库。 **2. 数据库的物理结构** 1. **控制文件**:存储...

    Oracle中比对2张表之间数据是否一致的几种方法

    CREATE DATABASE LINK maclean_connect_to_maclean IDENTIFIED BY maclean USING 'G10R21'; ``` 4. **使用`dbms_comparison`包**: 使用`dbms_comparison`包来对比两个表的数据。例如,可以调用`dbms_...

    Oracle数据库学习日记

    - **分组总结**: 综合使用 `group by` 和 `having` 子句进行复杂的统计分析。 #### 七、多表查询 ##### 7.1 多表查询,between and 语句 - **多表联接**: 使用 `join` 语句。 - 示例: `select e.name, d....

    Introduction To ORACLE9i:SQL2

    根据提供的文件信息,我们可以从中提炼出与Oracle 9i SQL2相关的多个重要知识点。下面将对这些知识点进行详细的阐述。 ### Oracle 9i SQL2简介 #### 1. Oracle 9i SQL2背景 Oracle 9i SQL2是Oracle公司推出的一款...

    Oracle11gOCP-051干货笔记

    - **GROUP BY统计报告**:通过分组计算统计数据。 - **分层查询**:层次查询,如CONNECT BY,用于处理树状结构数据。 - **ORACLE TIMEZONE**:处理时区转换,用于全球化应用。 - **正则表达式**:用于复杂的数据匹配...

    ORACLE函数库中文手册

    7. **连接与分组函数**:如CONNECT_BY_ROOT、START WITH、CONNECT BY用于构建层次查询;GROUP BY和ROLLUP用于数据分组。 8. **游标和PL/SQL过程**:游标是处理单条记录的指针,常用于循环遍历结果集。PL/SQL是...

Global site tag (gtag.js) - Google Analytics