select c.name,c.outdate,d.indate from
(select rownum rn,a.name,a.outdate from your_table a) c ,
(select rownum rn,b.name,b.indate from your_table b) d
where c.rn=d.rn(+)+1
and c.name = d.name
(select rownum rn,a.name,a.outdate from your_table a) c ,
(select rownum rn,b.name,b.indate from your_table b) d
where c.rn=d.rn(+)+1
and c.name = d.name
SQL> select * from bao_temp order by col1,col2 desc
2 /COL1 COL2 SEQ
---------- ---------- ----------
A 31 1
A 21 2
A 11 3
B 45 1
B 31 2
B 21 3
B 11 4
C 78 1
C 31 2
C 21 3
C 11 4選取了 11 列目前歷時: 00:00:00.78
-------------------------------------------------------
SQL> select c.col1,c.seq,d.col2 from
2 (select rownum rn,a.col1,a.seq from bao_temp a) c ,
3 (select rownum rn,b.col1,b.col2 from bao_temp b) d
4 where c.rn=d.rn(+)+1
5 order by col1,col2 desc
6 /COL1 SEQ COL2
---------- ---------- ----------
A 1
A 3 31
A 2 11
B 4 21
B 2 21
B 1 21
B 3 11
C 1 45
C 2 31
C 4 31
C 3 11選取了 11 列目前歷時: 00:00:00.09
而且應該用c.rn=d.rn(+)-1;
------------------------------------
SQL> select * from bao_temp
2 /COL1 COL2 SEQ
---------- ---------- ----------
A 31 1
A 11 3
A 21 2
B 11 4
B 21 3
B 31 2
C 31 2
C 11 4
C 21 3
B 45 1
C 78 1選取了 11 列目前歷時: 00:00:00.94
SQL> select c.col1,c.seq,d.col2 from
2 (select rownum rn,a.col1,a.seq from bao_temp a) c ,
3 (select rownum rn,b.col1,b.col2 from bao_temp b) d
4 where c.rn=d.rn(+)-1
5 /COL1 SEQ COL2
---------- ---------- ----------
A 1 11
A 3 21
A 2 11
B 4 21
B 3 31
B 2 31
C 2 11
C 4 21
C 3 45
B 1 78
C 1選取了 11 列目前歷時: 00:00:00.25
sql具体实现下方法如下:
table名为:temp_date
数据如下:
names indate outdate rowid
A 2005-1-2 6:01:07 2005-1-2 6:02:01 AAAHrXAAJAAAAAKAAA
A 2005-1-2 6:05:07 2005-1-2 6:10:01 AAAHrXAAJAAAAAKAAB
A 2005-1-2 6:16:01 2005-1-2 6:19:01 AAAHrXAAJAAAAAKAAC
A 2005-1-2 6:25:02 2005-1-2 6:30:01 AAAHrXAAJAAAAAKAAD
B 2005-1-2 6:05:07 2005-1-2 6:10:01 AAAHrXAAJAAAAAKAAE
B 2005-1-2 6:16:01 2005-1-2 6:19:01 AAAHrXAAJAAAAAKAAF
A 2005-1-2 6:00:07 2005-1-2 6:01:01 AAAHrXAAJAAAAAKAAGsql语句为:
SELECT c.names,d.outdate,c.indate FROM
(SELECT ROWNUM rn,a.names,a.indate FROM (SELECT e.names,e.indate FROM temp_date e ORDER BY e.names,e.outdate) a) c,
(SELECT ROWNUM rn,b.names,b.outdate FROM (SELECT f.names,f.outdate FROM temp_date f ORDER BY f.names,f.outdate) b) d
WHERE d.rn=c.rn-1
AND c.names = d.names得到的数据内容为:
names outdate indate
A 2005-1-2 6:01:01 2005-1-2 6:01:07
A 2005-1-2 6:02:01 2005-1-2 6:05:07
A 2005-1-2 6:10:01 2005-1-2 6:16:01
A 2005-1-2 6:19:01 2005-1-2 6:25:02
B 2005-1-2 6:10:01 2005-1-2 6:16:01再次表示感谢!现在给分baojianjun(包子):20