-- 需求:求出下表的一个小时内id个数的最大值和最小值。
SQL> WITH t AS (
2 SELECT 1 "id",TO_DATE('2011-04-27 14:05:12','yyyy-mm-dd hh24:mi:ss') c_time FROM DUAL UNION ALL
3 SELECT 2,TO_DATE('2011-04-27 15:10:42','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
4 SELECT 3,TO_DATE('2011-04-27 15:20:52','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
5 SELECT 4,TO_DATE('2011-06-27 15:12:12','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
6 SELECT 5,TO_DATE('2011-06-27 15:25:52','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
7 SELECT 6,TO_DATE('2011-06-27 15:32:12','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
8 SELECT 7,TO_DATE('2011-06-28 15:25:42','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
9 SELECT 8,TO_DATE('2011-07-11 15:25:42','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
10 SELECT 9,TO_DATE('2011-07-11 15:25:42','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
11 SELECT 10,TO_DATE('2011-07-22 15:25:42','yyyy-mm-dd hh24:mi:ss') FROM DUAL UNION ALL
12 SELECT 11,TO_DATE('2011-07-23 15:25:42','yyyy-mm-dd hh24:mi:ss') FROM DUAL
13 )
14 SELECT "id",TO_CHAR(c_time,'yyyy-mm-dd hh24:mi:ss') FROM t ORDER BY 2;
id TO_CHAR(C_TIME,'YYYY-MM-DDHH24:MI:SS')
---------- --------------------------------------
1 2011-04-27 14:05:12
2 2011-04-27 15:10:42
3 2011-04-27 15:20:52
4 2011-06-27 15:12:12
5 2011-06-27 15:25:52
6 2011-06-27 15:32:12
7 2011-06-28 15:25:42
8 2011-07-11 15:25:42
9 2011-07-11 15:25:42
10 2011-07-22 15:25:42
11 2011-07-23 15:25:42
-- 使用分析函数,range
SELECT t."id",
TO_CHAR(c_time, 'yyyy-mm-dd hh24:mi:ss'),
COUNT(*) OVER(ORDER BY c_time RANGE BETWEEN CURRENT ROW AND INTERVAL '1' hour following) cnt
FROM t;
-- 其中range表示范围,between...and 表示之前的范围和之后的范围
-- CURRENT ROW表示当前行,INTERVAL '1'表示一个小时
-- 结果如下:
id C_TIME CNT
---------- -------------------------------------- ----------
1 2011-04-27 14:05:12 1
2 2011-04-27 15:10:42 2
3 2011-04-27 15:20:52 1
4 2011-06-27 15:12:12 3
5 2011-06-27 15:25:52 2
6 2011-06-27 15:32:12 1
7 2011-06-28 15:25:42 1
8 2011-07-11 15:25:42 2
9 2011-07-11 15:25:42 2
10 2011-07-22 15:25:42 1
11 2011-07-23 15:25:42 1
-- 最终的sql:
SELECT MIN(cnt) min_hour,
MAX(cnt) max_hour
FROM (SELECT COUNT(*) over(ORDER BY c_time RANGE BETWEEN CURRENT ROW AND INTERVAL '1' hour following) cnt
FROM t)
-- 结果:
MIN_HOUR MAX_HOUR
---------- ----------
1 3
分享到:
相关推荐
分享一个自己编写的Oracle 9i、10g、11g通用的Range分区自动扩展存储过程,可以在输入相应参数后自动实现RANGE表分区的扩展,推荐在数据仓库、经营分析等OLAP数据库中使用。
Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据主导地位。其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自...
这些文件对于已经在使用Oracle 11g的用户或者需要与特定硬件集成的用户来说非常有用。 总的来说,"oracle12C依赖包.zip"提供了全面的Oracle数据库安装所需资源,包括依赖包、安装指南和可能的特殊场景处理方案。...
在Oracle中,常见的执行计划类型包括全表扫描(Full Table Scans)、索引唯一扫描(Index Unique Scans)、范围扫描(Index Range Scans)、跳跃扫描(Index Skip Scans)和位图连接(Bitmap Joins)等。每种类型的...
### Oracle索引使用样例详解 #### 一、索引并行创建 在Oracle数据库中,并行创建索引可以显著提高创建索引的速度,尤其是在处理大量数据时。下面的SQL语句展示了如何并行创建一个索引: ```sql CREATE INDEX IDX_GD...
例如,使用VBA(Visual Basic for Applications)在Excel中编写一个宏,该宏可以自动连接到Oracle数据库,执行SQL查询,并将结果填充到工作表中。以下是一个简单的VBA代码示例: ```vba Sub ExportFromOracle() ...
- 使用`chown -R oracle:oinstall /u01/app/oracle /u02/oradata`命令将这些目录的所有权更改为`oracle`用户及其所属的`oinstall`组。 - 使用`chmod -R 775 /u01/app/oracle /u02/oradata`命令调整目录权限,确保...
然后,使用 Docker 镜像运行容器,并在容器中执行多个命令以安装 Oracle。 环境准备 在宿主机上,需要安装 Centos 操作系统,并安装 Docker 软件。 Docker Version 应该是 1.12.5 或更高版本。同时,需要准备 ...
### Oracle在Linux中的安装知识点详解 #### 一、系统需求与准备 在开始安装Oracle之前,需要确保Linux系统的环境满足Oracle官方的要求。本案例中,Linux服务器为SuSE 10 SP2 64位,Oracle版本为11g R2 64位。 ###...
9. **时间性能度量**:在Oracle中,可以使用`DBMS_UTILITY.GET_TIME`来获取系统时间,以衡量SQL语句的执行时间(以1/100秒为单位)。 以上只是Oracle日期处理的一部分,还有许多其他函数和技巧,如`ADD_MONTHS`、`...
Oracle 中分区表的使用 Oracle 中的分区表是一种高级数据库管理技术,可以将大型数据表拆分为多个小的、独立的分区,以提高应用系统的性能和可用性。分区表可以根据不同的标准来拆分数据,例如根据日期、序号、哈希...
在本篇文章中,我们将详细介绍如何在CentOS 6.4 64bit操作系统上安装Oracle 11g数据库,包括配置监听的步骤。 前期准备安装环境 在安装Oracle 11g之前,需要准备以下环境: * 操作系统:CentOS 6.4 64bit * 硬件...
在Fedora 8上安装Oracle...在实际操作中,建议使用Oracle认证的Linux发行版,如Oracle Linux或者Red Hat Enterprise Linux。如果你坚持在Fedora 8上安装,可能需要解决更多兼容性问题,且可能得不到官方的技术支持。
在本文档中,我们将详细介绍如何在 Linux 操作系统中安装 Oracle 10g 数据库。安装 Oracle 10g 需要满足一定的前提条件,并需要对 Linux 系统的内核参数进行修改。 安装前的准备工作 在安装 Oracle 10g 之前,需要...
### Oracle为何有时不使用索引来查找数据 Oracle数据库在处理SQL查询时,会根据一系列复杂的因素决定是否使用索引以及如何高效地检索数据。本文将深入探讨Oracle在哪些情况下可能会选择不使用索引的原因,并解释...
在Oracle 10g中,当执行DBMS_STATS包中的GATHER_SCHEMA_STATS或GATHER_TABLE_STATS等过程时,索引的使用会被自动记录。然而,自Oracle 11g起,这种机制发生了变化,不再默认监控索引使用频率。这使得数据库管理员...
本文将详细介绍如何在Linux系统中安装oracle11G。 一、挂盘 在安装oracle11G之前,需要挂载安装盘。使用mount命令将安装盘挂载到/mnt目录下,例如: [root@zjh ~]# mount /dev/cdrom /mnt 然后,使用rpm命令安装...
Linux 上安装 Oracle 11g 详细步骤 本文将指导您在 Linux 操作系统上安装 Oracle 11g 数据库。安装过程可能会很繁琐,但按照以下步骤,您可以顺利完成安装。 安装环境 * 操作系统:Red Hat Linux 5.4 (32 位) * ...
- **创建Oracle用户**:使用`useradd -u 502 -g oinstall -G dba,oper oracle`命令创建Oracle用户,指定用户ID和所属组。 5. **设置用户权限**: - **设置Oracle用户的密码**:使用`passwd oracle`命令为Oracle...
在本文中,我们将详细介绍如何在 Deepin 操作系统上静默安装 Oracle 数据库管理系统。静默安装的优点是可以快速、批量地安装 Oracle 数据库,而不需要人工干预。 安装依赖包 在安装 Oracle 之前,我们需要安装一些...