表A,其中一列为登记时间,varchar2类型,格式是'YYYYMMDD',
就是说DJSJ这一列的数据以天为单位的,但其中可能缺少了某些天的记录,怎么找出缺少的天数来
。构建一含全部天数的临时表,然后用exists筛选吗?
如何构建这个时间段内含所有天数的临时表呢?
就是说DJSJ这一列的数据以天为单位的,但其中可能缺少了某些天的记录,怎么找出缺少的天数来
。构建一含全部天数的临时表,然后用exists筛选吗?
如何构建这个时间段内含所有天数的临时表呢?
解决方案 »
- 怎么向oracle 中插入CLOB类型的数据
- 请大神们予以指导下这个导入导出的sh 如何优化 速度更快
- oracle表在线重定义后blocks变小,所占空间变小?
- 急求oracle client 9 dll文件!!!!
- ora 00909错误
- 用恢复目录Rman备分数据库
- 数据库select并发的问题,请各位帮忙
- 数据库连接的问题
- 怎么使用OCI??怎么使用OCI??怎么使用OCI??怎么使用OCI??怎么使用OCI??怎么使用OCI??怎么使用OCI??怎么使用OCI??怎么使用
- why在SH.SALES_TRANSACTIONS_EXT表上创建触发器失败?
- ORACLE字符集问题 ORA-01756: quoted string not properly terminated
- 请问关于数据自动填入数据库的问题
SELECT B.DT
FROM(
SELECT '20101212' DJSJ FROM DUAL UNION ALL
SELECT '20101224' FROM DUAL UNION ALL
SELECT '20101225' FROM DUAL UNION ALL
SELECT '20101226' FROM DUAL UNION ALL
SELECT '20101229' FROM DUAL
) A,
(SELECT TO_CHAR(TO_DATE('20101201','YYYYMMDD')+ROWNUM-1,'YYYYMMDD') DT FROM DUAL CONNECT BY ROWNUM<32) B
WHERE B.DT=A.DJSJ(+)
AND A.DJSJ IS NULL
ORDER BY B.DT
---先使用你的最小时间到现在构造虚表,然后minus
SQL>
SQL> with taba as(
2 select '20101215' DJSJ from dual union all
3 select '20101218' from dual union all
4 select '20101220' from dual
5 )
6 select to_char(to_date(DJSJ, 'yyyymmdd') + rownum - 1, 'yyyymmdd') DJSJ
7 from taba
8 connect by rownum <= sysdate - to_date('20101215', 'yyyymmdd')
9 minus
10 select DJSJ from taba
11 ;DJSJ
--------
20101216
20101217
20101219
20101221
20101222
20101226
201012297 rows selectedSQL>
构建一个临时表,然后两个表minus,这样最简单,
不用minus就用exists,
恩,已经实现了,现在有个新需求。怎么从A中取得离缺数据那天最近的日期,比如
A中有2010-12-03,2010-12-07,的数据,
那么缺数据的是2010-12-04,2010-12-05,2010-12-06三天的,要分别取离这三天的最近的A中的记录
就应该是2010-12-03,2010-12-03(舍去2010-12-07),2010-12-07
怎么获得这三个日期??
1.选定一个日期每次减1,如果存在于临时表,继续减1,如果存在于你的日期表,返回第一个日期,结束循环
2.选定一个日期每次加1,如果存在于临时表。继续加1,如果存在于你的日期表,然会第一个日期,结束循环
3.两个日期同你当前选定的日期比较,选出最小值,如果两个差值相等,去小的日期。---------考验你的时候到了。。呵呵good luck...
递归构建临时表 在existsselect substr(dt,1,6)||lpad(level,2,'0')
from dual
connect by level<=(select to_char(last_day(to_date('某个时间','yyyy-mm-dd')),'dd') from dual)