sql server - query to find the previous and next rows from the current one which includes order by clause -
i execute following query:
select quotesid quotestable quotesauthor '%mahatma%' order popularity desc which gives me following results: (quotesid - primary-key)
968 158 159 160 161 my requirement:
i need next , previous quotesid (order popularity desc). example if in 158th record. next , previous values should 159 , 968 respectively need in single query.
query
select * quotestable (quotesid = (select min(quotesid) quotestable quotesid > 158 , quotesauthor '%mah%' ) or quotesid = (select max(quotesid) quotestable quotesid < 158 , quotesauthor '%mah%' )) order popularity desc this not work. gives me 1 record - 159. there way write single query , results desired?
fiddle:
perhaps, work you. gives query row number index , left outer join shifted +1 , -1 record produce [next] , [previous] columns.
with cte ( select quotesid, row_number() on (order popularity desc) [rowno] quotestable ) select cte.quotesid, [next].quotesid [next], [prev].quotesid [previous] cte left outer join cte [next] on cte.rowno = ([next].rowno - 1) left outer join cte [prev] on cte.rowno = ([prev].rowno + 1) result:
quotesid next previous ------------------------ 968 158 null 158 159 968 159 160 158 160 161 159 161 null 160 sql fiddle: http://sqlfiddle.com/#!6/0ac0b/4
Comments
Post a Comment