Oracle数据整理

1.表中有四个字段:人员编号,开始时间,结束时间,类型,数据ID,需要实现如下需求

a.当类型为-1时,丢弃该记录

b.当类型为-1时,且前一行结束时间为null,当前行的开始时间-1作为前一行的结束时间

c.如果后面的时间比前面的时间早,则覆盖前面的时间,不能覆盖的时间要保留

d.时间段重叠的要合并为一行

with x1 as
(select userid,startdate,coalesce(min(case when type=-1 then add_months(startdate,-1) else startdate end) over(partition by userid order by vid rows between 1 following and unbouded following),startdate+1) as minsdate, enddate as orgenddate,
case when enddate is null and (lead(type) over(partition by userid order by vid))=-1 then add_months((lead(startdate) over(partition by userid order by vid)),-1) else enddate end as enddate,type,vid,
max(vid) over(partition by userid) as max_id from test,
 x2 as
(select userid,startdate,minsdate,enddate,type,vid,max_id,
  case when (lag(enddate) over(partition by userid order by vid))<add_months(startdate,-1) then 1
  when (lag(type) over(partition by userid order by vid))=1 then null else 1 end as so from x1),
x3 as
(select userid,vid,max_id,type,sum(so) over(partition by userid order by vid) as so,
           startdate,minsdate,
           case when minsdate<enddate and minsdate>=startdate then minsdate else enddate end as enddate
           from x2 where type=1 and startdate<=minsdate),
x4 as
(select userid,max_id,max(vid) as max_id2,sum(type) as type,
           min(startdate) keep(dense_rank first order by vid) as startdate,
           max(enddate) keep(dense_rank last order by vid) as enddate
  from x3)
select userid,to_char(startdate,‘yyyymm‘)||‘--‘||coalesce(to_char(enddate,‘yyyymm‘),‘NULL‘) as rangeSpace
from x4
where (max_id=max_id2 or startdate<=enddate) and type>-1;
时间: 2024-09-29 21:27:10

Oracle数据整理的相关文章

Oracle 数据整理

/* 大数据这块用到了 Oracle ... 记录一下. */ SELECT ssn,password FROM (Select ROWNUM AS ROWNO, T.* from ACCOUNT T where ROWNUM <= 200) ACCOUNT WHERE ACCOUNT.ROWNO >= 0

oracle数据性能库优化方案精髓整理收集回顾

oracle数据库性能优化总体法则: 一.减少数据访问(减少硬盘房访问次数) 二.返回更少的数据(减少网络传输或磁盘访问) 三.减少交互次数(减少网络传输) 四.减少服务器开销(减少cpu及内存开销) 五.利用更多的资源(增加资源) ===================具体说明================= 一.减少数据访问(减少硬盘房访问次数) 1.减少数据访问 1.1.创建并使用正确的索引 索引会大大增加DML(增删改)的开销[合理的索引会大大提高效率100倍.1000倍,但不合理的索

Oracle 数据库整理表碎片

Oracle 数据库整理表碎片 转载:http://kyle.xlau.org/posts/table-fragmentation.html 表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎片.删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用. 怎样确定是否有表碎片 -- 收集表统计信息 SQL> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME'); -

Oracle数据导入导出基本操作示例

Oracle数据导入导出基本操作示例 数据导出 a.将数据库orcl完全导出,用户名user 密码password 导出到D:\dc.dmp中 exp user/[email protected]   file=d:\dc.dmp    full=y full=y   表示全库导出 b.将数据库中user1和user2用户导出 exp user/[email protected]  file=d:\dc.dmp    owner=(user1,user2) full方式可以备份所有用户的数据库对

VS2015操作Oracle数据需要做那些设置?

1>在oracle网上下载:ODP.NET 2> 要根据自己的oracle 数据32bit/64bit,选择下载. 3> 根据提示配置tnsnames.ora文件. # alias = # (DESCRIPTION = # (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1521)) # (CONNECT_DATA = # (SERVER = DEDICATED) # (SERVICE_NAME = orcl) # ) # ) al

Oracle 数据集成的实际解决方案

就针对市场与企业的发展的需求,Oracle公司提供了一个相对统一的关于企业级的实时数据解决方案,即Oracle数据集成的解决方案.以下的文章主要是对其解决方案的具体描述,望你会有所收获. Oracle 数据集成解决方案 Oracle数据集成解决方案用于在SOA.BI和数据仓库环境中构建.部署和管理以实时数据为中心的架构,包含了Oracle数据集成的所有要素--实时数据移动.转换.同步.数据质量.数据管理和数据服务--能确保各个复杂系统的信息及时.准确.一致. 通过使用Oracle数据集成,企业将

Oracle 数据操作提示“记录被另一个用户锁住”

oracle数据中删除数据时提示“记录被另一个用户锁住” 解决方法: 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id=l.object_id

oracle(数据备份)

1 --oracle数据备份(三种方法) 2 --1.逻辑备份与恢复:用Oracle提供的工具,导入/导出(exp,imp),数据 3 --泵导入/导出(impdp,expdp),装入器(SQL*Loader) 4 --2.脱机备份与恢复:指在关闭数据库的情况下对数据库文件的物理备份与 5 --恢复,是最简单,最直接的方法,也称为冷备份与恢复 6 --3.联机备份与恢复:指在数据库处于打开的状态下(归档模式)对数据库进 7 --行的备份与恢复,只有能联机备份与恢复的数据库才能实惠不停机地使用.

Oracle数据迁移expdp/impdp

Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创建Directory 2.使用expdp导出用户数据 2.1 只导出scott用户的元数据,且不包含统计信息: 2.2 只导出scott用户的数据: 2.3 只导出scott用户下的emp,dept表及数据: 2.4 只导出scott用户下的emp,dept表结构: 2.5 导出scott用户下所有