-
oracle数据库 求一条sql15
有以下需求: 数据库为oracle
有一张表 tel(varchar2),up_time(timestamp)
数据: 1,2014-3-31 12:20:30
1,2014-3-31 12:20:35
1,2014-3-31 12:20:36
1,2014-3-31 12:21:01
1,2014-3-31 12:21:03
1,2014-3-31 12:21:05
1,2014-3-31 12:21:11
1,2014-3-31 12:21:15
1,2014-3-31 12:21:18
想得到以下数据:
1,2014-3-31 12:20:30
1,2014-3-31 12:20:35
1,2014-3-31 12:21:01
1,2014-3-31 12:21:11
1,2014-3-31 12:21:18
(大体意思就是以查询出来的第一条数据为基准 找到下一条间隔时间大于等于5秒的数据,然后以下一条数据为基准,再找到它的下一条大于等于5秒的数据,以此类推)
求大神解~~~~~~~
问题补充:初始化脚本:
create table t_test
(
tel VARCHAR2(12) not null,
up_time TIMESTAMP not null
);
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:20:30','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:20:35','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:20:36','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:21:01','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:21:03','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:21:05','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:21:11','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:21:15','yyyy-MM-dd HH:mi:ss'));
insert into t_test(tel,up_time) values('1', to_timestamp('2014-3-31 12:21:18','yyyy-MM-dd HH:mi:ss'));
commit;2014年3月31日 16:34
3个答案 按时间排序 按投票排序
-
采纳的答案
select x.*,sys_connect_by_path(to_char(x.up_time,'yyyy-MM-dd hh:mi:ss'), '/' ) from ( select a.*,(select min(up_time) from t_test b where b.up_time >= a.add_time) next_time from( select t.*,t.up_time + 1/(24*60*60)*5 add_time from t_test t ) a ) x start with x.up_time = to_date('2014-03-31 12:20:30','yyyy-MM-dd hh:mi:ss') connect by prior x.next_time = x.up_time
主要思路是通过oracle的connect by 递归实现,但实现的时候有个问题,就是你的表缺少字段来连接上下记录,所以要自己模拟
上面sql主要分成以下几个步骤:
1.select t.*,t.up_time + 1/(24*60*60)*5 add_time from t_test t
增加一列表示up_time加上5秒是哪个时间,结果如果下:引用
1 2014-03-31 12:20:30 2014-03-31 12:20:35
1 2014-03-31 12:20:35 2014-03-31 12:20:40
1 2014-03-31 12:20:36 2014-03-31 12:20:41
1 2014-03-31 12:21:01 2014-03-31 12:21:06
1 2014-03-31 12:21:03 2014-03-31 12:21:08
1 2014-03-31 12:21:05 2014-03-31 12:21:10
1 2014-03-31 12:21:11 2014-03-31 12:21:16
1 2014-03-31 12:21:15 2014-03-31 12:21:20
1 2014-03-31 12:21:18 2014-03-31 12:21:23
2.select a.*,(select min(up_time) from t_test b where b.up_time >= a.add_time) next_time from( select t.*,t.up_time + 1/(24*60*60)*5 add_time from t_test t ) a
在步骤一的基础上,增加一列next_time,即根据步骤一计算出的列add_time(也就是up_time加上5秒的值)来得到此add_time与原表数据中的up_time哪个最近。结果如下:引用
1 2014-03-31 12:20:30 2014-03-31 12:20:35 2014-03-31 12:20:35
1 2014-03-31 12:20:35 2014-03-31 12:20:40 2014-03-31 12:21:01
1 2014-03-31 12:20:36 2014-03-31 12:20:41 2014-03-31 12:21:01
1 2014-03-31 12:21:01 2014-03-31 12:21:06 2014-03-31 12:21:11
1 2014-03-31 12:21:03 2014-03-31 12:21:08 2014-03-31 12:21:11
1 2014-03-31 12:21:05 2014-03-31 12:21:10 2014-03-31 12:21:11
1 2014-03-31 12:21:11 2014-03-31 12:21:16 2014-03-31 12:21:18
1 2014-03-31 12:21:15 2014-03-31 12:21:20
1 2014-03-31 12:21:18 2014-03-31 12:21:23
3.这就可以根据步骤二得到的表结构进行oracle递归查询了,查询条件就是根据next_time=up_time来进行2014年4月01日 11:07
相关推荐
假设我们已经创建了"Employee"表,可以这样插入一条记录: ```sql INSERT INTO Employee (ID, Name, Salary) VALUES (1, '张三', 5000.0); ``` 在LabVIEW中,对应的VI会包含一个"构建SQL"节点和一个"执行SQL(无...
优化器根据不同的情况为每条SQL语句生成一种或多种执行计划,并从中选择最优方案执行。理解优化器的工作原理对于提高数据库性能至关重要。 1. **优化器的优化方式** - **基于规则的优化方式(Rule-Based ...
写一条SELECT查询语句 在查询中使用表达式、运算符 对空值的处理 对查询字段起别名 查询字段的连接 第二章 条件查询 WHERE条件查询 在查询中使用表达式、运算符 使用LIKE、BETWEEN、IN进行模糊查询 第三章 单行...
从给定的文件信息中,我们可以提取到关于Oracle数据库中SQL操作的重要知识点,特别是与创建表、定义主键约束以及插入数据相关的操作。下面将详细解释这些知识点。 ### 创建表 在Oracle数据库中,`CREATE TABLE`...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,SQL(Structured Query Language)是与数据库交互的语言,而PL/SQL则是Oracle特有的过程化语言,用于编写更复杂的数据库操作和应用程序。本教程结合SQL...
1. **安装PL/SQL Developer**:首先需要安装PL/SQL Developer工具,这是一个功能强大的Oracle数据库开发工具,支持数据导入导出等功能。 2. **安装ODBC驱动程序**:为了能够通过ODBC导入器连接到Oracle数据库,需要...
Oracle数据库是一种广泛应用于企业的关系型数据库管理系统,由Oracle公司开发,以其高效、稳定和强大的功能著称。本节将深入解析Oracle数据库的基础知识。 1. 数据库概念: 数据是数据库中存储的基本元素,常以...
- **AWR报告**:Oracle数据库自带的一种性能诊断工具,能够收集关于数据库实例的工作负载信息,包括CPU使用率、等待事件、IO统计等。 **示例分析:** 假设从AWR报告中发现某条SQL语句在短时间内执行多次,且每次...
- **填充参数并添加到批处理**: 循环遍历列表中的每一条记录,并使用`pst.setString()`方法设置每个`?`占位符对应的值。然后通过`pst.addBatch();`将当前的SQL语句添加到批处理队列中。 ```java for (int i = 0; i...
在PL/SQL中,可以声明一个游标,执行SQL查询,并通过循环遍历游标来显示记录集中的每一条信息。 2. **子程序_转换到SQL时间**: 数据库中的时间数据通常以特定的格式存储,例如TIMESTAMP或DATE类型。在处理这些...
### Oracle数据库常见查询语句详解 #### 1. 基础查询 - **SQL语句**: `SELECT * FROM emp;...通过这些示例,读者可以更深入地了解如何使用SQL语言来处理Oracle数据库中的数据,从而实现高效的数据管理。
在`while`循环中,我们可以遍历并处理每一条记录。 除了查询,Oracle.ManagedDataAccess库还支持存储过程的调用、事务处理、参数化查询等功能,可以满足各种复杂的数据库操作需求。 总的来说,Oracle....
SQL语句的并行处理指的是将一条SQL语句分解成多个子任务,利用多处理器或多核架构,在不同的CPU上并行执行这些子任务,从而显著减少响应时间和提高数据库的吞吐量。 并行处理的优势在处理大型数据集时尤为明显,如...
总的来说,Oracle数据库性能优化是一个全面的过程,涵盖硬件配置、软件设置、SQL优化、存储策略等多个方面。需要根据系统负载、业务需求以及资源状况进行综合分析,持续监控和调整,以实现最优的数据库运行状态。...
访问Oracle数据库主要通过执行SQL语句来实现。`OracleCommand`类用于创建和执行命令,例如查询、插入、更新或删除数据。下面是一个执行SELECT查询的例子: ```csharp OracleCommand cmd = new OracleCommand(...
对于想要深入学习Oracle数据库的用户来说,本书《Oracle数据库从入门到精通》提供了一条清晰的学习路径。书中的内容被设计成能够使读者从基础开始逐渐深入到高级话题。书中不仅涵盖了基础概念,还包括了实际应用开发...
这份“Oracle数据库从入门到精通”的资料,旨在为初学者提供一条系统的学习路径,帮助他们从零开始掌握Oracle数据库的基础知识和高级应用。 一、Oracle数据库基础 Oracle数据库的核心是SQL(结构化查询语言),它...
接下来,使用CommandText属性添加SQL语句,可以是一条或多条。为了实现批处理,我们可以使用分号(`;`)作为每条SQL语句的分隔符。例如: ```csharp OracleCommand command = new OracleCommand(); command....
在IT行业中,数据库管理是至关重要的任务之一,Oracle数据库作为全球广泛使用的数据库系统,经常需要处理大量的数据导入工作。在面对存储着大量记录的文本文件(如TXT)时,手动一条条输入数据显然是低效且易出错的...
在ORACLE数据库中,SQL优化是指通过一系列手段来提高SQL语句的执行速度,以减少对系统资源的消耗,提高整体性能。 首先,了解SQL语句的执行过程是进行优化的前提。SQL语句的执行主要分为四个阶段:语法阶段、优化...