일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 가우스
- phonegap
- iBATIS
- tomcat
- Struts
- rowspan
- PLSQL
- 선택적조인
- node.js
- 전자정부프레임워크
- swingx
- JSON
- JDOM
- MFC
- Spring
- WebLogic
- jQuery
- Google Map
- ibsheet
- dock
- oracle
- PHP
- sencha touch
- jsr 296
- MySQL
- appspresso
- Android
- Eclipse
- GPS
- Ajax
- Today
- Total
Where The Streets Have No Name
선분이력 활용하기 본문
출처 : 엔코아컨설팅
PURPOSE
SCOPE & APPLICATION
KEY IDEA
(KEY WORD : 이력관리,평잔,선분이력,BETWEEN JOIN)
SUPPOSITION
DESCRIPTION
이력을 관리하는 데이터에 대해서 대부분의 경우는 선분이력을 관리하는 것이 대부분의
경우이다. 하지만, 선분이력에서 어느 시점에 해당하는 건을 찾기는 매우 쉽다.
즉 다음과 같이 Between을 이용하여 찾으면 된다.
.............
WHERE '20000901' BETWEEN A.START_DATE AND A.END_DATE
.............
하지만 실제 업무에서는 위와 같은 요구뿐만 아니라 어느 기간내에서 일어난 모든 건을
찾고자하는 경우가 존재하기 마련이다. 예를 들어, 은행업무에서 특정 기간동안의
평균잔액을 구하고자 할 경우에서 위와 같은 요구사항은 필요할 것이다.
위의 그림은 우리가 찾고자 하는 선분이력을 도식화한 것이다. 물론 실제로는 훨씬
복잡한 선분이력이 존재하지만 모든 것들이 전부 위의 4가지의 Case내에 포함되는
내용이다.
즉, 위의 4가지 Case의 내용을 만족하는 Record를 찾으면 된다.
위 조건을 만족하는 데이터를 찾기위해서 대부분의 개발자들은 여러 가지 복잡한
조건들을 OR 로 연결하여 사용하고 있다. 하지만, 자세히 살펴보면 다음의 단순조건
으로 위의 조건을 만족하는 Record를 찾을 수 있다.
.............
WHERE ..............
AND SDATE <= :EP
AND EDATE > :SP
............
아주 간단한 조건을 사용하여 위의 4가지의 모든 Case의 Record를 찾을 수 있는
것이다.
결국은 위에서 찾아진 Record를 대상으로 여러 가지 연산(평잔,일별 누계,....)등을
구할 수 있는 것이다. 또한 위의 Case 1,3,4에 대해서는 시작일과 종료일을 구할 때에
주의해야 한다. 즉, 다음과 같이 구하면 해결할 수 있을 것이다.
SELECT ........
GREASTEST(:SP,SDATE) 시작일,
LEAST(:EP,EDATE) 종료일,
.........
위와 같이 구해진 시작일과 종료일을 가지고 우리가 원하는 연산을 수행하면 된다.