안녕하세요. 일정 쿼리 작성중 막혀서 문의합니다.
특정일(20220401)과 조회년(2023) 을 받아 분기마다 일정을 만들어야 합니다
20230101
20230401
20230701
20231001
이런식으로 매년 값을 구해야 하는데 방향도 못잡고 있습니다
감사합니다
예시로 들은 항목은 특정일과 상관없이 조회년도 만으로 분기가 만들어지는 거 같습니다.
정확한 시나리오와 결과값을 알려주시면 많은 분께서 편하게 도움을 주실거 같네요.
조금더 설명 하면
특정일 +3개월(분기) 마다 값을 조회해야합니다
좀더 상세한 설명이나 다른 조건 예시에 따른 결과를 보여주세요.
지금 설명은 왜 두개의 조건이 필요한지 당위성이 없습니다.
감사합니다.
제가 약을 2종류먹는데 A약과B약을 분기(3개월)한번씩 먹어야합니다
A약을 먹기시작한날(20220401),B약(20220501)을 먹기시작한날이고 내년(2023)에는 A,B을 먹어야하는 날을 구해야 합니다
(A,20230101
B,20230201
A,20230401
B,20230501
A,20230701
B,20230801
A,20231001
B,20231101)
예상결과 입니다
설명이 부족해서 죄송합니다
감사합니다
특정일을 1개만 설정 했을때의 쿼리를 작성해봤습니다.
SELECT T1.YYYYMMDD
FROM (
SELECT TO_CHAR(ADD_MONTHS(TO_DATE(:특정일변수,'YYYYMMDD'), (LEVEL - 1) * 3), 'YYYYMMDD') AS YYYYMMDD
FROM DUAL
CONNECT BY TO_CHAR(ADD_MONTHS(TO_DATE(:특정일변수,'YYYYMMDD'), (LEVEL - 1) * 3), 'YYYY') <= :년도변수
) T1
WHERE T1.YYYYMMDD LIKE :년도변수 || '%'
WITH t AS
(
SELECT 'A' cd, '20220401' dt FROM dual
UNION ALL SELECT 'B', '20220501' FROM dual
)
SELECT cd
, TO_CHAR(ADD_MONTHS(dt, (CEIL(MONTHS_BETWEEN(sdt, dt) / 3) + lv - 1) * 3), 'yyyymmdd') dt
FROM (SELECT cd
, TO_DATE(dt, 'yyyymmdd') dt
, TO_DATE('2023' || '01', 'yyyymm') sdt -- 조회년도
FROM t
)
, (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 4)
;
두분 너무 감사합니다