하나의 날짜컬럼을 startdate와 enddate로 나누고 싶습니다. 0 10 654

by trive [MySQL] 날짜 mysql [2020.09.02 14:32:06]


현재 날짜가 저장된 컬럼이 하나 있습니다.

================================

REG_DTM

=======

2020-08-04 13:11:25

2020-08-10 13:12:25

2020-08-10 13:13:25

....

================================

 

그런데 이 날짜일수별로 특정 값을 계산해야합니다

예를들어 위 데이터를 기준으로

8월1일부터 8월3일까지는 각각 1000을 계산해서 3000을 얻고

8월4일부터 8월9일까지는 각각 2000을 계산해서 12000의 값을,

8월10일부터 8월31일까지 (혹은 오늘날짜까지) 각각 3000을 계산해서 66000값을 얻어서

값을 모두 더해 반환하는 함수를 만들려고 합니다.

 

그런데 애초에 start와 end가 나눠져 있었으면 모를까... 기록 날짜만 저장된 상태에서는 도무지 어떻게 해야될지를 모르겠습니다

뭔가 다른 방법이 없을까요?

 

by 마농 [2020.09.02 14:48:30]

1000, 2000, 3000 등의 금액정보 테이블이 어떻게 생겼는지 알아야 정확한 답변이 가능하겠네요.
종료일은 LEAD 등의 분석함수를 통해 구할 수 있긴 하지만. (MySQL 8.0 부터 분석함수 지원)
검색 기간 시작, 종료에 해당하는 부분까지 감안한다면? 복잡한 가공이 필요할 수도 있을 것입니다.


by trive [2020.09.02 15:08:20]

금액정보는 아래와 같이 되어있습니다

PRICE | REG_DTM

===============

1000 | 2020-08-04 13:11:25

2000 | 2020-08-10 13:12:25

3000 | 2020-08-10 13:13:25

...     | ....

======================

덧붙여서 굳이 start와 end로 출력하지 않아도 합산된 값만 구할수 있으면 괜찮을거 같긴 합니다만

역시 쉽진 않을거 같네요

그래도 답변 달아주셔서 감사합니다.


by 마농 [2020.09.02 15:15:44]

금액정보가 위와 같다면? 결과표 예측이 틀린 듯 하네요?
04~09 가 2000 이 아닌 1000 이 되어야 맞을 듯 합니다.
01~03 은 1000 이나니라 그 이전 날짜(8월이전)의 값을 가져와야 할것 같네요.
10~31 은 2000 과 3000 중 나중값 3000 을 가져오는게 맞겠죠?
원하는 결과표를 정확하게 만들어 주시면 좋겠네요.
분석함수 LEAD/LAG 함수에 대해 확인해 보시고, 버전도 알려주세요.


by trive [2020.09.02 15:28:49]

제가원하는 결과표는 아래와 같습니다

 

start          | end           | ans

=====================

2020-08-01 | 2020-08-03 | 3000

2020-08-04 | 2020-08-09 | 12000

2020-08-10 | 2020-08-31 | 66000

======================

마지막줄의 경우 만약 오늘날짜가 2020-08-20일경우 31일까지가 아닌 20일까지 계산된 값이 나오게 하려고합니다.

DB는 10.4.10-MariaDB입니다.


by 마농 [2020.09.02 15:34:23]

제가 생각하는 결과와 다른데요.
왜 이렇게 나와야 하는지 명확한 설명이 필요합니다.
저는 (1000 | 2020-08-04)의 의미를 "8월4일부터는 1000 이 적용된다"라고 생각합니다.
그런데 원하시는 결과표는 이중적인 기준이 적용된 결과라 납득이 안가네요.


by trive [2020.09.02 16:28:02]

죄송합니다. 제가 업무를 잘못이해하고 있었습니다.

마농님께서 말씀해주신결과가 정확합니다. 부정확한 정보를 드려서 죄송합니다.


by 마농 [2020.09.02 16:31:01]

위 결과표에서 1일~3일까지 금액은 어떻게 나와야 하나요?
- 1. 8월 1일 의 자료가 없으므로 0 이 나와야 한다?
- 2. 8월 이전 자료가 있는지 확인하여 그값을 가져와야 한다? (예 : 7월 21일 500원)


by trive [2020.09.02 16:33:00]

첫번째줄에 입력되어있던 1000 | 2020-08-04의 값을 이용해서 출력되어야 합니다.


by 마농 [2020.09.02 16:49:55]

음... 기준이 좀 이상하긴 한데...확실한가요?
제가 제시한 둘 중 하나가 맞을 듯 한데? (저는 2번 추천합니다.)
이상하긴 해도 기준이야 정하기 나름이니.
지금 제시하신 3번 기준이 확실하다고 생각하나요.
잠깐 생각하고 기준을 정하지 마시고 심사 숙고한 뒤에 기준을 정해 주세요.
기준이 정해지면 그 뒤에 다시 한번 질문해 주세요.
다시 질문 하실 때는 원본대비 결과표를 명확하게 제시해 주세요.


by trive [2020.09.07 15:12:28]

친절한 답변 감사합니다

저번에 말씀해주셨던 LEAD/LAG 함수를 알아보고나서야 어떻게 진행할지 방향성이 잡혀서 그대로 쭉 작업한다고 미처 추가댓글을 달지 못했습니다.

작업하는 와중에도 기준이 이걸참조했다가 저걸 참조했다가 하는게 꽤있어서 이전에 설명드렸던걸로는 부족하겠다 싶은 면이 많더라구요.

그래도 유용하게 사용할수있는 함수를 알려주신 덕분에 큰도움이 되었습니다. 정말 감사합니다. :)

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