现在有段查询语句,根据用户要求需要同时查询出上一条和下一条的记录来。小弟目前的想法是这样:SELECT *
FROM
    (SELECT ROWNUM RN, T.*
     FROM 
         (<原来的SQL>) T)
然后再根据查询得到的结果提交到应用程序中去处理。不过小弟想把这个增强下,能不能直接使用一句SQL就查询出上一条、本条和下一条这三条记录。提前谢谢各位了

解决方案 »

  1.   

    可以考虑分析函数——lead与lag
    sample:
    select id,name,salary,lag(salary,1,0) over (order by salary) lag,
    lead(salary,1,salary) over (order by salary) lead from emp;
      

  2.   

    SQL> select empno,ename,sal,lag(sal,1,0) over (order by sal) lag,lead(sal,1,sal) over (order by sal) lead from
      2  scott.emp;EMPNO ENAME            SAL        LAG       LEAD
    ----- ---------- --------- ---------- ----------
     7369 SMITH         800.00          0        950
     7900 JAMES         950.00        800       1100
     7876 ADAMS        1100.00        950       1250
     7521 WARD         1250.00       1100       1250
     7654 MARTIN       1250.00       1250       1300
     7934 MILLER       1300.00       1250       1500
     7844 TURNER       1500.00       1300       1600
     7499 ALLEN        1600.00       1500       2450
     7782 CLARK        2450.00       1600       2850
     7698 BLAKE        2850.00       2450       2975
     7566 JONES        2975.00       2850       3000
     7788 SCOTT        3000.00       2975       3000
     7902 FORD         3000.00       3000       5000
     7839 KING         5000.00       3000       500014 rows selected