在oracle查询中查找跟踪和前导记录

时间:2017-06-01 05:15:13

标签: sql oracle

我希望得到跟踪和领先记录达到匹配条件。 我想得到

empid          last_nm
----------- -------------------------
        179 Johnson                  
        180 Taylor Maddy
        178 Grant Son                    
        34  John                  
        180 Taylor Ross
        178 Mia                    
        179 Rocky   

如何在这里添加 例如:select * from emp where empid=34 我只得到emp_id为34,last_nm为约翰

emp表包含记录

empid          last_nm
----------- -------------------------
        178 Graham                    
        179 Johnson                  
        180 Taylor Maddy
        178 Grant Son                    
        34  John                  
        180 Taylor Ross
        178 Mia                    
        179 Rocky                  
        180 Siva

1 个答案:

答案 0 :(得分:1)

您可以使用ROWNUM伪列和MAX() OVER ()分析函数执行此操作:

SELECT empid,
       last_nm
FROM   (
  SELECT e.*,
         MAX( CASE WHEN empid = 34 THEN ROWNUM END ) OVER () AS matched_rn,
         ROWNUM AS rn
  FROM   employees e
)
WHERE  rn BETWEEN matched_rn - 3 AND matched_rn + 3;