안녕하세요 지난 아래 링크에서 질문 했었던건 있었습니다.
http://www.gurubee.net/article/87918
제가 결과값에 대한 세팅을 잘못 표시한 부분이 있어 재 질문 드립니다.ㅠㅠ
기존 결과값 입니다.
WITH tab_a AS
(
SELECT '2023-05-22' strt_dt, '2023-12-31' end_dt, 365 year_cnt FROM dual
UNION ALL SELECT '2024-01-01', '2024-01-14', 366 FROM dual
)
, tab_b AS
(
SELECT '2023-01-01' strt_dt, '2023-09-15' end_dt, 1 rt FROM dual
UNION ALL SELECT '2023-09-16', '2023-12-25', 3 FROM dual
UNION ALL SELECT '2023-12-26', '9999-12-31', 5 FROM dual
)
SELECT GREATEST(a.strt_dt, b.strt_dt) strt_dt
, LEAST(a.end_dt, b.end_dt) end_dt
, a.year_cnt
, b.rt
FROM tab_a a
, tab_b b
WHERE a.strt_dt <= b.end_dt
AND b.strt_dt <= a.end_dt
;
수정 결과 값으로 아래와 같이 나올려면 어떻게 해야 할까요?
결과
STRT DT END_DT YEAR_CNT RT
2023-05-22 2023-09-15 365 1
2023-09-15 2023-12-25 365 3
2023-12-25 2023-12-31 365 5
2023-12-31 2024-01-14 366 5
안녕하세요 마농님
이전에 도움 주셔서 매우 감사드립니다. ^^
해당 사유는 이자율에 따른 금액 계산을 하기 위해서 입니다.
2023-05-22 ~ 2024-01-14 까지 이자 금액 계산을 하려고 하는데 계산시 년도 일수에 따른 365과 366일 계산을 합니다.
그사이에 이자율 적용 기간에 따라 적용하여 금액 계산을 다른게 합니다.
그래서 가져온 결과 값으로 일자 계산을 하는데 아래 기존 결과에서는 구간별로 1일씩 차이가 있어 총 3일에 차이가 생기게 됩니다.
기간시작 | 기간종료 | 총일수 | |||
2023-05-22 | 2024-01-14 | 237 | |||
결과값 | 종료일부터 계산일수 | 차이일수 | |||
1 | 2023-05-22 | 2023-09-15 | 116 | 116 | 0 |
2 | 2023-09-16 | 2023-12-25 | 100 | 101 | -1 |
3 | 2023-12-26 | 2023-12-31 | 5 | 6 | -1 |
4 | 2024-01-01 | 2024-01-14 | 13 | 14 | -1 |
234 | -3 |
그래서 구간의 종료일자가 다음 구간의 시작일자로 되어야 일자 계산 되어 다시한번 도움을 요청 드렸습니다.^^;;
이해가 되셨을지 모르겠네요~ㅠ
1. 제가 생각하는 일수는 (종료일 - 시적일 + 1) 입니다.
- 이 식에 대입하면 첫번째 행만 하루 오차가 생기지요.
- 따라서 첫행만 보정하면 됩니다.
2. 그런데 질문의 내용을 보면 일수 계산이.
- (종료일 - 시적일 + 1) 이 아닌 (종료일 - 시적일) 을 하는 모양이네요.
- 그래서 첫행만 맞게 나오고 나머지 행이 다르게 나오는 거겠죠?
3. 원하는 대로 답변 드리는 것은 다양한 방식으로 가능합니다.
- 다만 저는 그게 맞는가 의구심이 들어서 그런거에요,
- 처음엔 의도를 몰라 왜 그래야 하는가? 질문한 것이고
- 두번째에는 하루가 다른 이유에 대해 알게 됬지만
- 그에 대한 해결방법이 이게 맞는가? 싶었던 것이죠.
○ 원하는 것을 해결하는 방안
- LAG 를 이용하여 이전 종료일로 대체하는 방안
- ROWNUM 을 이용하여 첫행일 때와 아닐 때를 구별하여 처리하는 방안
○ 여러가지 방안이 있을 수 있는데.
1. 시작일 종료일은 그대로 두고 일수계산만 다르게 적용하는 방안
- 첫행에만 일수 계산시 -1
2. 첫행의 시작일을 바꾸는 방안
- 첫행에만 +1 일
3. 첫행을 제외한 나머지 행들의 시작일을 바꾸는 방안
- 시작일 - 1일 (질문자가 요청한 방안)
저는 의미상으로 3안 보다는 1,2 안이 더 적절하다고 생각했습니다.