DENSE_RANK两种方式

时间:2013-05-27 01:57:08

标签: sql oracle

感谢我对上一个问题的回答,我可以建立这种查询

http://sqlfiddle.com/#!4/3e6f9/7/0

结果表显示每个暂停数据之前的工作时间。

由此,我想添加另一个列,显示“每个暂停数据后的工作时间”,结果如下所示。

STAFF | MAX(...) | START_TIME | END_TIME | MIN(...)
------+----------+------------+----------+---------
GC01  | 12:00    | 12:03      | 12:07    | 12:10  
GC01  | 12:20    | 12:25      | 12:35    | 12:40  
GC02  | 12:33    | 12:35      | 12:45    | (null)  

1 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西。您需要重新加入工作表:

select p.staff, 
   max(w.work_time) keep (dense_rank first order by w.work_time desc),
   p.start_time, p.end_time,
   min(w2.work_time) keep (dense_rank first order by w2.work_time)
from pause p
   join work w
      on p.staff = w.staff
         and p.start_time >= w.work_time
left join work w2
   on p.staff = w2.staff
      and p.end_time <= w2.work_time
group by p.staff, p.start_time, p.end_time