반응형
시작일 종료일이 존재하는 스케쥴 테이블 존재 하고
각 row별로 월화수목금 에 해당하는 값이 존재시
이를 하나의 row로 표시할 경우
/*
level 값을 붙임으로서 path 가 제일 아래인 것의 값을 max로 불러올 수 있게 됨
substr로 7부터 자르는 것은 rpad가 5부터이고 , 를 생각해서 6자리 이후 것들만 뽑기 위해임
*/
select max(id)
, max(stdy)
, max(endy)
, substr(max(rpad(level, 5, '-') || sys_connect_by_path(dowk, ',')), 7) as dowk_lst
from (
/*
row_number 에서 stdy, endy 로 묶고 dowk 기준으로 정렬하여 순번을 생성
*/
select a.*
, row_number() over(partition by stdy, endy order by dowk) as rn
from (
/*
스케쥴 테이블에서 id가 sklee인 사람의 stdy, endy, dowk(날짜) 기준으로
중복되지 않게 쭉 뽑아냄.
schedule 테이블은 시간 도 포함되어 같은 stdy, endy 에 대하 시간대별로
많은 row를 가지게 됨
*/
select distinct
id
, stdy
, endy
, dowk
from schedule
where id = 'sklee'
) a
)
connect by prior rn = rn - 1
and prior stdy
and prior endy
group by stdy, endy
order by stdy