oracle中如何查询一条数据的前后十条记录

如题所述

1、有时间字段, 根据时间条件排序,取前十条和后十条
(1)前十条:
select * from (select * from tab_name a order by date_col )
where rownum<11;
(2)后十条:
select * from (select * from tab_name a order by date_col desc)
where rownum<11;

2、没有时间字段, 直接根据物理存储顺序,取前十条和后十条
(1)前十条:
select * from (select * from tab_name a order by rownum)
where rownum<11;
(2)后十条:
select * from (select * from tab_name a order by rownuml desc)
where rownum<11;
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-13
用大于小于
SELECT * FROM TABLE WHERE DATACOLUMN < 这条数据的这个(或者直接干脆写select语句把这个数据取出来) AND ROWNUM <= 10
UNION ALL
SELECT * FROM TABLE WHERE DATACOLUMN > 这条数据的这个 AND ROWNUM <= 10追问

是用一条sql把前后十条查出来的,谢谢???

追答

UNION ALL,查询的就是前后10条
以某条数据为例,前10条肯定是默认排序的小于本行某个字段的值的前10行
而后10条是大于本行某个值的前10行

只用一个SELECT是不可能的。你可以把以上的UNION ALL看成一个表,然后在外面套一个select * from ( a union all b ) t,这样t中的字段就可用了。

第2个回答  推荐于2017-09-14
假设查询的是第20行前后10条数据
前十条 select * from tb where rownum < 20
minus
select * from tb where rownum =< 9
后十条 类似的写法本回答被提问者采纳
相似回答