求一sql的编写!

lilac_lkd 2005-01-15 12:40:23
请问我以下数据:
name indate outdate
01 2005-01-02 06:01:07 2005-01-02 06:02:01
01 2005-01-02 06:05:07 2005-01-02 06:10:01
01 2005-01-02 06:16:01 2005-01-02 06:19:01
01 2005-01-02 06:25:02 2005-01-02 06:30:01
现要按下方排列:
name outdate indate
01 2005-01-02 06:02:01 2005-01-02 06:05:07
01 2005-01-02 06:10:01 2005-01-02 06:16:01
01 2005-01-02 06:19:01 2005-01-02 06:25:02
既第一记录的结束时间排在前,第二条记录的开始时间排在后,且在数据
库中是一组的name值,里面的数据是打乱的,并不一定是按同名的顺序排
列的!请问哪位大侠能只用一条语句完成这样的排列,如果不能一条完成,
有何办法实现它呢?谢谢帮忙!
...全文
154 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilac_lkd 2005-01-16
  • 打赏
  • 举报
回复
感谢baojianjun(包子)给的思路,虽然还是没能达到我的要求,但根据你的思路我已经得出那条sql语句,再次表示感谢谢!
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 AAAHrXAAJAAAAAKAAG

sql语句为:
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
qiaozhiwei 2005-01-15
  • 打赏
  • 举报
回复
用分析函数再结合上面的方法,我没有环境,不方便调试,不好意思了
baojianjun 2005-01-15
  • 打赏
  • 举报
回复
上面的例子有點問題,不需要排序的,
而且應該用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
baojianjun 2005-01-15
  • 打赏
  • 举报
回复
--example
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
baojianjun 2005-01-15
  • 打赏
  • 举报
回复
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

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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