기준일자로 이전기간의 값을 기준일자로 찍어주고싶습니다 ㅠ 0 6 3,372

by 홋떡 [Oracle 기초] [2024.03.20 16:46:35]


발령명 시작일자 종료일자 구하고싶은값
재임용 20200401 20210331  
퇴직 20190331   201903
계약변경 20180401 20190331 201903
재임용 20180401 20190331 201903
퇴직 20180331   201803
계약변경 20170401 20180331 201803
신규임용 20170401 20180331 201803

이런 데이터가 있을때,

퇴직일자기준으로 그 이전데이터들은 바로 상위의 퇴직일자를 찍어주고싶습니다. 

어떤 방식이 있을까요....?

by 마농 [2024.03.20 17:10:26]

예시처럼 종료일자가 이미 들어 있는 상황이라면?
종료일자 그대로 뽑으면 되겠는데요? 종료일 없으면 시작일로 대체
NVL(종료일자, 시작일자)


by 홋떡 [2024.03.21 10:02:44]

답변 주셔서 감사합니다~

근데 원하는 값은 퇴직의 시작일자 기준이라서요.. 

ex) 하위 2번째를 기준으로 말씀드리자면 계약변경건이 20170401~20180331 일때 그 다음 퇴직건이 20180401 이면 

하위3개 퇴직, 계약변경, 신규임용의 구하고싶은값에는 201804 가 들어가게 하고싶습니다!!


by 마농 [2024.03.21 10:25:04]

처음부터 그런 예외적인 사항이 포함된 예를 들어 주셨어야 합니다.
평범하고 아무 이상이 없는 예시자료로 질문하시니
굳이 복잡하게 구할 필요가 있나? 의구심이 들게 되는 거죠.
추가로.
시작일자가 동일한 건에 대해 순서가 어떻게 정해지나요?


by 마농 [2024.03.21 10:42:51]
WITH t AS
(
SELECT 1 eno, '재임용' app, '20200401' sdt, 1 seq, '20210331' edt FROM dual
UNION ALL SELECT 1, '퇴직'    , '20190331', 1, ''         FROM dual
UNION ALL SELECT 1, '계약변경', '20180401', 3, '20190331' FROM dual
UNION ALL SELECT 1, '재임용'  , '20180401', 2, '20190331' FROM dual
UNION ALL SELECT 1, '퇴직'    , '20180401', 1, ''         FROM dual
UNION ALL SELECT 1, '계약변경', '20170401', 2, '20180331' FROM dual
UNION ALL SELECT 1, '신규임용', '20170401', 1, '20180331' FROM dual
)
SELECT eno, app, sdt, seq, edt
     , SUBSTR(
       LAST_VALUE(DECODE(app, '퇴직', sdt)) IGNORE NULLS OVER
       (PARTITION BY eno ORDER BY sdt DESC, seq DESC)
       , 1, 6) rym
  FROM t
 WHERE eno = 1
 ORDER BY sdt DESC
;

 


by 홋떡 [2024.03.21 13:40:04]

아하! 설명이 부족했는데도 성심성의껏 답변주셔서 감사합니다!

시작일자가 동일한 건의 경우 먼저 입력된 것이 먼저 나오도록 처리합니다!

마농님께서 보내주신 쿼리 활용해서 잘 해결하였습니다! 감사합니다!!

-----------------

답변기능이 안되서 여기에 남깁니다

표에 구성하지는 않았지만 각각의 발령마다 처리일자(저장일자 개념) 를 가지고 있어서 그걸로 판별하려고합니다


by 마농 [2024.03.21 13:46:45]

먼저 입력된 것이 먼저 나온다는 당연한 답변을 원한게 아닙니다.
먼저 입력된 것이 무엇인지를 어떻게 판별하느냐는 질문입니다.
저는 판별 기준항목으로 임의로 seq 항목을 추가했습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입