안녕하세요. 현재 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일까지의 것만 날짜의 행사만 조회되었으면 합니다.
답변 부탁드립니다. 감사합니다.
시작일 이벤트 갯수
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;
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 ;
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. 사용하실때는 저 임시테이블을 지우시고 상황에 맞게 수정하시면 될것입니다.