특정기간을 제외한 날짜계산 0 17 973

by Oracle10g [SQL Query] [2017.09.18 09:18:40]


안녕하십니까!
몇일전 마농님과 아찌님꼐 도움받은 적이있습니다. 
막혀있던 부분이 해결되고 별 문제없이 여러 추가 화면들을 개발했습니다.

그런데.......................변수가 생겼습니다...............ㅠㅠ

휴직을 관리하는 테이블이 있는데 
직원이 휴직을 신청하여 승인되면 ER_INFNTT이라는 테이블에 쌓이는데 
이 기간(STRYMD ~ENDYMD)만큼 점프해서 달력에 표시되어야 한다고 합니다................


------------------------------------------------------------------------------------
Ex) 500915 사원은 2017-09-01이 시작일자이다
    
    보통은
    2017-09-01 ~ 2017-09-03 1주차
    2017-09-04 ~ 2017-09-10 2주차
    2017-09-11 ~ 2017-09-17 3주차~ ...

그런데 휴직신청을 냈다... (휴직기간 : 2017-09-04~2017-09-13)
    이럴경우
    2017-09-01 ~ 2017-09-03 1주차

    2017-09-04 ~ 2017-09-13 휴직중
    2017-09-14 ~ 2017-09-17 2주차
    2017-09-18 ~ 2017-09-24 3주차~ 로 표시되어야한다.
------------------------------------------------------------------------------------


기본 주차를 나누는 계산식부터가 뒤틀려버리니까 어찌할 방법을 못찾겠습니다.

마농님, 아찌님 매번 도움만 받아 죄송합니다...ㅠㅠ
긴글 읽어주셔서 감사합니다. 

by 마농 [2017.09.18 10:35:26]

1. 이미지 말고 표(테이블)로 만들어 주실 수 없나요?
  - 테스트 하기 위해 그림 보고 타이핑하기 힘듭니다.
  - 복사가 가능하도록 예시자료를 만들어 주세요.
2. 질문의 설명과 이미지의 자료가 일치하지 않네요.
  - 원본, 결과, 설명 3위일체가 되도록 예시자료를 만들어 주세요.
3. 테이블이 여러개인데
  - 각각의 역할과 관계 등에 대한 설명이 부족합니다.


by Oracle10g [2017.09.18 14:01:06]

마농님 엑셀로 다시올렸습니다!


by 우리집아찌 [2017.09.18 14:25:04]

테이블을 WITH 절로 만들어주실수는 없나요?

양도 많은데 저렇게 주시면 WITH절로 바꾸는것도 일입니다.

다들 일하는 도중에 짬내서 하는건데...


by Oracle10g [2017.09.18 14:38:34]

넵 아찌님 작업해서 올리겠습니다ㅠㅠ

바쁘신 와중에 죄송합니다 


by Oracle10g [2017.09.18 16:46:44]

샘플데이터 업로드 했습니다 아찌님!!


by 마농 [2017.09.18 16:05:12]

1. 일자별 근무일정이 있네요?
  - 주차별 근무일정은 필요 없겠는데요?
2. 일자별 근무일정 안에 주차 컬럼이 있네요?
  - 이 항목이 이미 휴직기간까지 고려하여 산정된 주차여야 하는것 아닌가요?
  - 저장된 값 따로 조회할 값 따로 가기 보다는
  - 휴직기간이 산정되면 그에 맞게 저장된 값을 업데이트 해야 하는게 맞을 듯 하네요.


by Oracle10g [2017.09.18 16:46:15]

1. 현업에서 1년치 근무부서 계획을 미리 짜놓고 싶다고 합니다..
2. 수련중에 정말 특수한 케이스로 인턴이 휴직을 신청하면 고용법상 거부할 수 없습니다. (기본적으로는 휴직자가 거의 없을것으로 예상하고 있습니다.)
3. 매달 [첨부파일_Sheet2]와 같이 근무표를 작성하다가 휴직을 신청하게 된다면 마농님 말씀처럼 휴직기간에 포함된 근무자의 근무는 DELETE 후 종료일자에 맞게 주차가 셋팅될 것이고 그 일자에 근무표 재편성 계획입니다.

 

제 생각이 구현하기에 제한적일까요..?ㅠㅠ 조언 여쭙습니다


by 마농 [2017.09.18 16:49:24]

저장된 값 따로, 조회하는 값 따로 가게 되면.. 유지보수 힘듭니다.
휴직신청이 되게 되어 승인이 되면 기 저장된 값을 새로이 갱신해서 맞춰주는 게 맞다고 생각합니다.
그러면 조회할 때 특별한 예외처리 로직이 없이 저장된 값 그대로 가져와 사용하면 되겠지요.


by Oracle10g [2017.09.18 17:16:27]

넵..조언감사합니다..마농님

그럼 일자별 주차, 일자별 근무무서를 미리 저장해 두고,

중간에 휴직이 발생하게 될 시 근무형태를 포함한 일자별주차,일자별 근무무서를 업데이트 해서 관리하라는 말씀이시죠?


by 마농 [2017.09.18 17:25:52]

네..


by Oracle10g [2017.09.18 17:32:56]

네..ㅠㅠ아..바쁘신데 죄송합니다 정말 감사합니다ㅠㅠ

그럼 1년치 수련부서계획을 저장할 시 근무표상에서 보이는 주차와 수련부서를 DD데이터로 저장하겠습니다.

그런데.. 기존에 저장된 일자별 주차,일자별 수련부서의 데이터를 휴직기간 동안 주차계산을 배제하여 업데이트 치는 로직을 잘 모르겠습니다 ㅠㅠ염치없지만 여쭤봐도 될까요..?

그리고 주차별, 일자별 누적되어가는 count, sum 계산은 어떻게 구현하나요..?


by Oracle10g [2017.09.18 17:47:05]

마농님 질문하나만 더 드려도 될까요..?

 

1. 2017-09-01 부터 수련을 시작하여 (2017-09-04 ~ 2017-09-10)의 기간이 2주차인 사원이 있다고 가정
   (이미 근무표가 작성되어있는 상황)


2. 2017-09-04 ~ 2017-09-12 동안 휴직을 신청하였음 


3. 휴직기간만큼 데이터 수정 : 기존 2주차(2017-09-04 ~ 2017-09-10)_7일간의 근무형태를 
   3주차로 계획되어있었던 기간(2017-09-11 ~ 2017-09-17) 에 업데이트..? 

이럴경우 휴직기간인 2017-09-11,2017-09-12 데이터는 삭제해야겠죠?


또한 이럴경우 근무형태까지 작성된 상태라면 근무형태의 일자를 업데이트 칠때 
2017-09-04 부터의 데이터를 순차적으로 2017-09-13 부터 남은 5일간의 데이터에 업데이트 치는게 맞는건지..

 

갱신한다는게 어떤 의미인지 제가 잘 이해를 못한것 같습니다 ㅠㅠ

어떻게 데이터를 관리해야 할까요?


by 마농 [2017.09.18 17:47:59]

1. 주차별 계획과 일자별 계획은
 - 일괄 생성하는 프로그램이 기존에 있을 것 같습니다.
 - 그 프로그램 참조하여 휴직기간 계산 로직을 추가하시면 되겠습니다.
2. 누적 로직은?
  - 분석함수를 이용하시면 편리합니다.
  - SUM(근무시간) OVER(PARTITION BY 사원 ORDER BY 근무일자)


by Oracle10g [2017.09.18 18:02:53]
도움 감사합니다 마농님!

by Oracle10g [2017.09.19 17:54:08]

마농님! 분석함수를 이용하여 누적시간 누적당직 주당휴일을 집계하였습니다.
그런데 연속수련시간이나 휴식시간을 구해야하는데 많이 헷갈립니다..
전날의 근무종료시간에서 ~ 당일의 근무시작시간 사이의 시간을 
전날종료부터 당일근무시간시작전까지의 휴식시간의 개념으로 당일에 표시해야합니다..
똑같이 주차별로 집계해야합니다..ㅠㅠ


by 마농 [2017.09.19 17:56:35]

전일의 자료에 대한 참조는 분석함수중 LAG 함수를 이용하시면 됩니다.
LAG(근무종료시간) OVER(PARTITION BY 사원 ORDER BY 근무일자)


by Oracle10g [2017.09.21 11:33:05]

마농님!! 조언감사합니다!!ㅠㅠ

그런데 시간계산하는 부분에서 막혀서 진전이 없습니다 ㅠㅠ

새로 질문등록하겠습니다.

매번 죄송한 마음과 감사한 마음 가지고 있습니다. 감사합니다 마농님!!

--수련주차, 수련부서에 대해 저장하여 관리하도록 하는 부분은 프로그램수정을 위해 공수계획을 잡아놓았습니다!!

감사합니다^^

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