일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Login with OAuth Authentication
- 상속예제
- Full text
- 다형성
- angular2
- 이클립스
- 야구게임
- 다운캐스팅
- full text indexing
- 자바
- 전자정부
- IBatis procedure
- while
- 페이징
- 형변환
- 전체
- Random
- 단축키
- Validations
- 25가지 효율적인 sql작성법
- 스프링
- 로또
- 자바 야구게임
- 상속
- 추상클래스
- 가변인자
- 업캐스팅
- jquery
- 전체텍스트
Archives
- Today
- Total
nalaolla
오라클(ORACLE) 날짜 레코드 만들기 CONNECT BY 본문
728x90
반응형
통계나 정산 쿼리를 짜다보면 날짜별 정산 내역을 조회할 경우가 있는데
중간에 비는 날짜가 생기는 경우 해당 날짜의 ROW가 없는 경우가 있는데
이럴때 'Connect By'를 이용해 날짜 레코드를 만들어서 OUTER JOIN을 걸어
사용하면 좋다.
날짜 레코드 만들기
- SELECT TO_CHAR(TO_DATE('{시작일자}', 'YYYYMMDD')+LEVEL-1, 'YYYY-MM-DD')
- FROM DUAL
- CONNECT BY LEVEL <= (TO_DATE('{종료일자}', 'YYYYMMDD')-TO_DATE('{시작일자}', 'YYYYMMDD')+1)
여기서 살짝 더 꼬아서 이런식으로 레코드를 만들면 날짜별 기준으로 레코드가 만들어져
무조건 날짜 기준으로 OUTER JOIN을 걸어서 사용해야 한다.
그러나 어떠한 레코드별 모든 날짜 레코드를 만들고 싶을 경우는
CROSS JOIN(교차조인)을 이용해 사용하면 된다.
그룹별 날짜 레코드 만들기
- -- 정렬 조건은 생략하고 나중에 처리해도 된다.
- SELECT G.{컬럼}
- FROM {테이블} G
- , (SELECT TO_CHAR(TO_DATE('{시작일자}', 'YYYYMMDD')+LEVEL-1, 'YYYY-MM-DD') AS DAY
- FROM DUAL CONNECT BY LEVEL <= (TO_DATE('{종료일자}', 'YYYYMMDD')-TO_DATE('{시작일자}', 'YYYYMMDD')+1) ) D
- ORDER BY G.{컬럼}, D.DAY
728x90
반응형
'ORACLE' 카테고리의 다른 글
25가지 효율적인 sql작성법 (0) | 2015.12.20 |
---|---|
오라클 함수 - ROLLUP, CUBE, GROUPING (0) | 2015.12.20 |
오라클(ORACLE) 문자열을 IN 쿼리로 변경하기 (0) | 2015.12.20 |
오라클(ORACLE) 프로시저 생성 및 FOR LOOP (0) | 2015.12.20 |
오라클(Oracle) group by 문자열 합치기 (0) | 2015.12.20 |