Oracle 시작, 종료일자로 각 일자별 이벤트 개수 0 6 1,439

by Ginam [2014.06.18 13:23:59]


안녕하세요. 현재 TB_SCH_EVT 라는 테이블에 아래와 같이 데이터가 들어있습니다.

EVT_ID EVT_NM EVT_STRT_DT EVT_END_DT
0001 개교기념일 14/05/15 14/05/15
0002 방학 14/06/21 14/07/30
0003 중간고사 14/04/20 14/05/03
0004 기말고사 14/06/15 14/06/20
0005 학부모회의 14/06/16 14/06/16

이 데이터에서 아래 예시와 같이 각 일자별 이벤트의 개수를 구하려고 하는데,

쉽사리 답이 나오지 않아 도움 요청드립니다. ㅠㅠ

-----------------------------------

_DATE               _EVENT_COUNT

14/06/15                  1

14/06/16                  2

14/06/17                  1

          :                       :

-----------------------------------

또한 이것을 조회할때 시작일자 및 종료일자가 6월1일부터 6월 30일 사이에 있는 것만 조회하려고 합니다.

예를 들어 방학 같은 경우 6월 20일부터 7월 30일까지 인데,

데이터를 끊어서 6월 20일 ~ 6월 30일까지의 것만 날짜의 행사만 조회되었으면 합니다.

답변 부탁드립니다. 감사합니다.

by 비니 [2014.06.18 14:02:35]

시작일 이벤트 갯수

select EVT_STRT_DT, count(EVT_STRT_DT) from table group by EVT_STRT_DT;

종료일 이벤트 갯수는 위에서 날짜 컬러만 바꾸어 주시면

날짜의 범위 검색까지 하시려면

select EVT_STRT_DT, count(EVT_STRT_DT) from table

where to_date('20140601', 'yyyymmdd') < EVT_STRT_DT  and

to_date('20140731', 'yyyymmdd') >= EVT_STRT_DT group by EVT_STRT_DT;

 

 


by Ginam [2014.06.18 15:06:54]

답변 감사드립니다. ^^


by 마농 [2014.06.18 14:31:50]
WITH t AS
(
SELECT '0001' evt_id, '개교기념일' evt_nm, '14/05/15' evt_strt_dt, '14/05/15' evt_end_dt FROM dual
UNION ALL SELECT '0002', '방학'      , '14/06/21', '14/07/30' FROM dual
UNION ALL SELECT '0003', '중간고사'  , '14/04/20', '14/05/03' FROM dual
UNION ALL SELECT '0004', '기말고사'  , '14/06/15', '14/06/20' FROM dual
UNION ALL SELECT '0005', '학부모회의', '14/06/16', '14/06/16' FROM dual
)
SELECT b.dt
     , COUNT(*) cnt
     , wm_concat(evt_nm) events
  FROM t a
     , (-- 기준일자
        SELECT TO_CHAR(sdt + LEVEL - 1, 'rr/mm/dd') dt
          FROM (SELECT TO_DATE('20140601', 'yyyymmdd') sdt
                     , TO_DATE('20140630', 'yyyymmdd') edt
                  FROM dual)
         CONNECT BY LEVEL <= edt - sdt + 1
        ) b
 WHERE b.dt BETWEEN a.evt_strt_dt AND a.evt_end_dt
 GROUP BY b.dt
 ORDER BY b.dt
;

 


by Ginam [2014.06.18 15:06:44]

답변 감사합니다.

테이블에 새로운 이벤트(ROW)가 추가되게 되면 SQL 문에 손으로 각 이벤트에 해당되는 내용을

UNION ALL SELECT OOOOOOOO FROM DUAL

여기에 써 주어야 하는건가요??

쿼리를 통해 테이블에 저장되있는 EVT_ID 와 EVT_NM, EVT_STRT_DT, EVT_END_DT 를 받아와서 수행할 수는 없는지요?


by 약쟁이총각 [2014.06.18 15:29:42]
WITH t AS
(
SELECT '0001' evt_id, '개교기념일' evt_nm, '14/05/15' evt_strt_dt, '14/05/15' evt_end_dt FROM dual
UNION ALL SELECT '0002', '방학'      , '14/06/21', '14/07/30' FROM dual
UNION ALL SELECT '0003', '중간고사'  , '14/04/20', '14/05/03' FROM dual
UNION ALL SELECT '0004', '기말고사'  , '14/06/15', '14/06/20' FROM dual
UNION ALL SELECT '0005', '학부모회의', '14/06/16', '14/06/16' FROM dual
) <-- 여기까지는 임시테이블 입니다.
1. 테이블명이 t이고.. 컬럼명이 evt_id.. 인 임시테이블을 만들어서 커리 검증을 한거줘..
2. 사용하실때는 저 임시테이블을 지우시고 상황에 맞게 수정하시면 될것입니다.

by Ginam [2014.06.18 17:33:26]

아 ^_^ 답변 감사합니다

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