오라클 일정 반복 조회 0 2 8,278

by 밍밍밍밍 [Oracle 기초] 반복 일정 [2024.10.03 16:25:59]


안녕하세요.

일정 데이터를 원하는 형식으로 추출이 가능한지 부탁드립니다.

 

1. 시작일로 부터 7일씩 반복횟수만큼 일정을 조회하려고합니다.

[테이블값]

일정명 시작일 반복횟수
sch1 20240906 5
sch2 20241001 3

 

[원하는 조회값]

일정명 반복일
sch1 20240906
sch1 20240913
sch1 20240920
sch1 20240927
sch1 20241004
sch2 20241001
sch2 20241008
sch2 20241015

 

 

 

 

by 우주민 [2024.10.04 09:11:12]
with t_name as (
select 'sch1' as col1, '20240906' as col2, 5 as col3 from dual union all
select 'sch2' as col1, '20241001' as col2, 3 as col3 from dual 
)
select 
  t1.col1
, to_char(to_date(col2,'yyyymmdd') + ((level -1) * 7),'yyyymmdd') as dt
from t_name t1
connect by level <= col3
and prior col1 = col1
and prior sys_guid() is not null
order by 1, 2

음... 원래 conect by level 은 단일행 데이터에 적용하는거라고 알고있는데...

아래 and 부분을 이용하면 여러행이 있는 데이터도 정상적으로 출력이 되네요.

단지 데이터량이 많아질때 어떤 성능적 이슈가 있을지는 잘 모르겠습니다... 만

일단은 원하시는 데이터가 나오기는 할꺼 같네요.


by 요런꺅쟁이 [2024.10.08 08:46:26]
WITH SCHEDULES AS (
    SELECT 'SCH1' AS SCHEDULE_NAME, TO_DATE('20240906', 'YYYYMMDD') AS START_DT, 5 AS REPEAT_CNT FROM DUAL 
    UNION ALL
    SELECT 'SCH2' AS SCHEDULE_NAME, TO_DATE('20241001', 'YYYYMMDD') AS START_DT, 3 AS REPEAT_CNT FROM DUAL
  ),
  NUMBERS AS (
    SELECT LEVEL AS N FROM DUAL CONNECT BY LEVEL <= (SELECT MAX(REPEAT_CNT) FROM SCHEDULES)
  )
SELECT S.SCHEDULE_NAME                                 AS SCHEDULE_NAME   
     , TO_CHAR(S.START_DT + (N.N - 1) * 7, 'YYYYMMDD') AS REPEATED_DT
  FROM SCHEDULES S
     , NUMBERS N 
WHERE N.N <= S.REPEAT_CNT
ORDER BY S.SCHEDULE_NAME   
        , REPEATED_DT
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입