搞数据库的看家本领:一个SQL如何些?

ycdch 2003-11-04 05:00:17
我有一个表的模型如下,

desc time
------- -----
... ...
B 1
E 2
B 3
E 4
B 5
E 6
B 7
B 8
E 9
B A
B B
E C
B D
E F
... ...

正常的应是(B)egin, 后一行即为(E)nd, 现要找出不正常的情况(Begin后没End):
B 7
B A

who to do?
...全文
41 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2003-12-09
  • 打赏
  • 举报
回复
select t1.*
(select desc,time from tbname) t1,
(select desc,time-1 from tbname) t2
where t1=t2(+) and t1.desc=t2.desc and t1.desc='B';
fage 2003-12-09
  • 打赏
  • 举报
回复
加一个序列号:
get seq into ...
insert into 上表 values(...,'begin', sysdate);
execute procedure;
insert into 上表 values(...,'end', sysdate);
这样一来就能判断了啊.
skyxj 2003-11-10
  • 打赏
  • 举报
回复
JOB.WHAT:
insert into 上表 values('begin', sysdate);
execute procedure;
insert into 上表 values('end', sysdate);

如果你的JOB.WHAT是并行处理,那自然是可能导致B\E顺序是混乱的,实际上,如果你依然定位在数据库下一行,这可能不是由于意外中断而产生的有B无E,因为可能的情况是BBEE,但不是意外中断错误。如果能保证串行处理,那么sysdata总是后推的,我的方法就可行。但是如果出现你的情况,你的需求就达不到。
redarmy_ 2003-11-09
  • 打赏
  • 举报
回复
select * from table a where a.desc='B' and
not exists(select * from table b where b.desc='E' and b.rownum=a.rownum+1)
如果要求E前必须是B
union all
select * from table a where a.desc='E' and
not exists(select * from table b where b.desc='B' and b.rownum=a.rownum-1)
ycdch 2003-11-07
  • 打赏
  • 举报
回复
hi,
怎么占有我的地盘,你的问题用ORACLE的工具SQLLDR, 或写程序解析, 或用PB的管道,或用sqlServer的DTC;
一边凉快去,别来烦我!
ycdch 2003-11-06
  • 打赏
  • 举报
回复
Fist, 谢谢各位!
第二种方法可能有问题, (我没有做测试),因为你的子查询无法定位到(紧跟)主查询的下一行!!

用cursor也是我的第一个想法(可以解决问题),但,是个蠢想法!

期待更好的方法... ...
superrubbish 2003-11-06
  • 打赏
  • 举报
回复
不知道怎麼發,好,我就發到你下面,樓主借你寶地一用..
各位神仙:小神這邊有禮拉
我剛剛從informix的一個table裡面倒出的資料
unload to maf_file.txt delimiter ' '
select * from maf_file
然後我想把他導入oracle相對應的表裡面,該怎麼做阿~~~
請幫忙阿,我都快哭拉..
superrubbish 2003-11-06
  • 打赏
  • 举报
回复
怎麼提問題阿,,怎麼沒有發貼的地方阿,郁悶
superrubbish 2003-11-06
  • 打赏
  • 举报
回复
好貼
ycdch 2003-11-06
  • 打赏
  • 举报
回复
Hi,
skyxj(java学习中…▲天行健)

该子查询返回(最多) 一行,这是肯定的; 但该行不(一定)是“紧跟”主查询的那一行,因为rownum是逻辑上的, 用rowID或许可能....

你用以下的试一试,就明白了:
insert into skyxj_test values('B', 11);
insert into skyxj_test values('E', 14);
insert into skyxj_test values('E', 12);
insert into skyxj_test values('B', 13);
insert into skyxj_test values('B', 19);
insert into skyxj_test values('B', 15);
insert into skyxj_test values('B', 16);
insert into skyxj_test values('B', 17);
insert into skyxj_test values('E', 18);
insert into skyxj_test values('E', 20);
insert into skyxj_test values('B', 1);
insert into skyxj_test values('E', 2);
insert into skyxj_test values('B', 3);
insert into skyxj_test values('B', 5);
insert into skyxj_test values('E', 6);
insert into skyxj_test values('B', 7);
insert into skyxj_test values('B', 9);
insert into skyxj_test values('E', 10);
commit;

-------
thanks anyway!!
skyxj 2003-11-06
  • 打赏
  • 举报
回复
条件t2.b > t1.b and rownum < 2使子查询已经定位到(紧跟)主查询的下一行!!
skyxj 2003-11-05
  • 打赏
  • 举报
回复
create table skyxj_test(a varchar2(2), b number(5));
insert into skyxj_test values('B', 1);
insert into skyxj_test values('E', 2);
insert into skyxj_test values('B', 3);
insert into skyxj_test values('B', 5);
insert into skyxj_test values('E', 6);
insert into skyxj_test values('B', 7);
insert into skyxj_test values('B', 9);
insert into skyxj_test values('E', 10);
commit;
按问题要求,应该是('B', 3)和('B', 7)为要找的记录,语句:
select * from skyxj_test t1 where a = 'B' and (select t2.a from skyxj_test t2 where t2.b > t1.b and rownum < 2) in ('B');
输出结果为:
SQL>

A B
-- ------
B 3
B 7
满足要求。
skyxj 2003-11-05
  • 打赏
  • 举报
回复
相应的函数不清楚
如果数据量可以接受的话,建好索引,自己写个存储过程实现就行
1按照程序,应该不存在只有End而没有Begin的记录。
2先查出所有Begin的记录,可以存到游标中,对于每条记录,查询比该记录时间大且时间最近的记录是否为End,如果不是说明该记录是要找的。
ycdch 2003-11-04
  • 打赏
  • 举报
回复
这是一个job中执行时产生的,
JOB.WHAT:
insert into 上表 values('begin', sysdate);
execute procedure;
insert into 上表 values('end', sysdate);

所以,b后面必须是e!!如果不是,该job的执行被kill了,然后又submit.
实际上是9i, 作为讨论,把8i也算上!
谢谢
hdkkk 2003-11-04
  • 打赏
  • 举报
回复
是否必须E紧跟B?
legend_ch 2003-11-04
  • 打赏
  • 举报
回复
select * from table A
where desc='B' and not exist
(select * from table
where desc='E' and tonumber(time)=tonumber(A.time)+1);
其中tonumber函数具体名称和用法可能不确切,但算法应该对的。
lianhg 2003-11-04
  • 打赏
  • 举报
回复
如果是9I,有相应的涵数;
8I吗?....

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧