2013-05-27 3 views
0

Благодара ответы на мой предыдущий вопрос, я мог бы установить этот вид запросDENSE RANK в обоих направлениях

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

Я думаю, что это то, что вы ищете. Вы должны вернуться к рабочему столу:

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 
Смежные вопросы