oracle中如何查询一条数据的前后十条记录
3个回答
展开全部
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)前十条:
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;
2011-04-13
展开全部
用大于小于
SELECT * FROM TABLE WHERE DATACOLUMN < 这条数据的这个(或者直接干脆写select语句把这个数据取出来) AND ROWNUM <= 10
UNION ALL
SELECT * FROM TABLE WHERE DATACOLUMN > 这条数据的这个 AND ROWNUM <= 10
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中的字段就可用了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假设查询的是第20行前后10条数据
前十条 select * from tb where rownum < 20
minus
select * from tb where rownum =< 9
后十条 类似的写法
前十条 select * from tb where rownum < 20
minus
select * from tb where rownum =< 9
后十条 类似的写法
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询