내용설명
2018년 05월 01일 기준으로 이전에 검사한 장비는 유효기간이 3년, 이후에는 4년으로 원하는 결과값이 나오게 하고 싶습니다.
최초검사일이 2011년 09월 19일이고 3년씩 계산되다가 2018년 05월 01일 이후 검사한 장비는 4년씩 계산되어야 하는데 잘 안되네요.
최초검사일자의 월, 일이 계속 따라가야 하고요.
도움 부탁드립니다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
쿼리결과
|
201년 05월 01일 이전에는 유효기간이 3년, 이후에는 4년입니다. |
|
ROW_NUM |
SERIAL |
검사일자 |
유효기간(현재 사용중) |
유효기간테스트1 |
원하는결과값 |
비고 |
|
4 |
11231 |
2021년 01월 06일 |
2025년 01월 06일 |
2019년 11월 13일 |
2024년 09월 19일 |
+4년 |
|
3 |
11231 |
2019년 11월 13일 |
2023년 11월 13일 |
2015년 11월 26일 |
2020년 09월 19일 |
+3년 |
|
2 |
11231 |
2015년 11월 26일 |
2018년 11월 26일 |
2011년 09월 19일 |
2017년 09월 19일 |
+3년 |
최초검사일 |
1 |
11231 |
2011년 09월 19일 |
2014년 09월 19일 |
0 |
2014년 09월 19일 |
+3년 |
---------------------------------------------------------------------------------------------------------------------------------------------------------
쿼리문
SELECT ROW_NUMBER() OVER(ORDER BY RLTSEQ) ROW_NUM
, NVL(A.SERIAL, '-') AS SERIAL
, A.INSDAT AS 검사일자
, A.NXTDAT AS 유효기간
--TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),36), 'YYYY') || '년 ' ||
, LAG(A.INSDAT,1,0) OVER(ORDER BY NXTDAT) 유효기간테스트1
, LAG(A.INSDAT,1,0) OVER(ORDER BY NXTDAT) 원하는결과값
FROM (
SELECT B.RLTSEQ AS RLTSEQ
, B.SUCNUM AS SUCNUM
, A.MNFTNM AS MNFTNM
, A.SERIAL AS SERIAL
, A.EQSTCD AS EQSTCD
, A.LGTSTD AS LGTSTD
, (SELECT CODENM
FROM COMCODET
WHERE CODGRP = 'C208'
AND CMCODE = A.LGTCOR) AS LGTCOR
--, A.INSDAT AS INSDAT
-- , TO_CHAR(TO_DATE(A.INSDAT), 'YYYY') || '년 ' ||
-- TO_NUMBER(TO_CHAR(TO_DATE(A.INSDAT), 'MM')) || '월 '||
-- TO_NUMBER(TO_CHAR(TO_DATE(A.INSDAT), 'DD')) || '일' AS INSDAT
-- , A.INSDAT AS INSDAT
, TO_NUMBER(TO_CHAR(TO_DATE(A.INSDAT), 'YYYY')) || '년 '||
TO_NUMBER(TO_CHAR(TO_DATE(A.INSDAT), 'MM')) || '월 '||
TO_NUMBER(TO_CHAR(TO_DATE(A.INSDAT), 'DD')) || '일' AS INSDAT
--, GET_EXPDAT(A.MNFTNO, A.INSDAT) AS NXTDAT
, CASE WHEN TO_CHAR(TO_DATE(A.INSDAT), 'YYYY-MM-DD') >= '2018-05-01' THEN
TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),48), 'YYYY') || '년 ' ||
TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),48), 'MM') || '월 ' ||
TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),48), 'DD') || '일 '
ELSE
TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),36), 'YYYY') || '년 ' ||
TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),36), 'MM') || '월 ' ||
TO_CHAR(ADD_MONTHS(TO_DATE(A.INSDAT),36), 'DD') || '일 '
END AS NXTDAT
FROM INSAPCDT A, INSRSLTT B
WHERE A.LGTSEQ = B.LGTSEQ
AND B.INSRLT = '10'
AND A.SERIAL = '11231'
UNION ALL
SELECT A.RLTSEQ AS RLTSEQ
, A.SUCNUM AS SUCNUM
, A.MNFTNM AS MNFTNM
, A.SERIAL AS SERIAL
, B.EQSTCD AS EQSTCD
, A.STNDCD AS STNDCD
, A.LGTCOR AS LGTCOR
, A.INSDAT AS INSDAT
, A.SUCDUR AS NXTDAT
FROM OLDRSLTT A, INSRSLTT B
WHERE A.SERIAL = '11231' AND A.RLTSEQ=B.RLTSEQ(+)
) A
ORDER BY A.RLTSEQ DESC;
|