日期:2014-05-17  浏览次数:20757 次

oracle 取当前数据的前N条记录
如题,一个简单的表,查询当前记录的前N条满足条件的记录,比如,表有10记录,页面传过来一条记录的ID=8,现在去ID=8记录的前3条满足条件的记录,下面这种不行
      select T.ID,T.VERSION  ,T.TITLE  ,T.CONTENT ,T.INDEX_KV  
          ,T.CONTENT_PIC  ,T.RECOMMEND_TYPE,T.RECOMMEND_PIC  
          ,T.RECOMMEND_URL  ,T.PAST_PIC  ,T.SHARE_CONTENT  ,T.SHARE_PIC  
          ,T.CREATE_DATE  ,T.IS_DELETED  ,T.STATE  ,T.GOOD_FLAG, T.BAD_FLAG,T.PAST_BIG_PIC
  from 
(select rownum rwno, a.* from flagshop_diagram a where  a.is_deleted = 0 and a.state=1 order by id) t
where rwno > 8-4 
and rwno < 8
,等大神解决,新手,没多少分。。。。。

------解决方案--------------------
引用:
如题,一个简单的表,查询当前记录的前N条满足条件的记录,比如,表有10记录,页面传过来一条记录的ID=8,现在去ID=8记录的前3条满足条件的记录,下面这种不行
      select T.ID,T.VERSION  ,T.TITLE  ,T.CONTENT ,T.INDEX_KV  
          ,T.CONTENT_PIC  ,T.RECOMMEND_TYPE,T.RECOMMEND_PIC  
          ,T.RECOMMEND_URL  ,T.PAST_PIC  ,T.SHARE_CONTENT  ,T.SHARE_PIC  
          ,T.CREATE_DATE  ,T.IS_DELETED  ,T.STATE  ,T.GOOD_FLAG, T.BAD_FLAG,T.PAST_BIG_PIC
  from 
(select rownum rwno, a.* from flagshop_diagram a where  a.is_deleted = 0 and a.state=1 order by id) t
where rwno > 8-4 
and rwno < 8
,等大神解决,新手,没多少分。。。。。

将你的满足条件的全部记录作为一个子查询。然后加上条件ROWNUM<N不行吗
------解决方案--------------------
你不是去满足条件的前三条么?
select * (select * from table where ... order by id ) where rownum<=3
------解决方案--------------------
内查询换成以下即可:

select row_number() over (order by id) rwno
    , a.* 
from flagshop_diagram a
where  a.is_deleted = 0
    and a.state=1