안녕하세요 선배님분들
현재 PostgreSQL 로 작업을 진행중인데요 주별로 통계 목록을 뽑는 쿼리를 질문 드립니다.
사용하는 컬럼이고
date 일자
week_cd 주별 코드
cascnt 통화 건수
time 통화 시간
go_cascnt 발령 건수
tlk_cascnt 발령 통화 건수
video_time영상 통화 시간
내용은 아래와 같은 형태로 들어가 있습니다.
date week_cd cascnt time go_cascnt tlk_cascnt video_time
2020-11-16 3 0 0 1 0 13
2020-11-25 4 0 0 68 0 3962
기준년월일 | 통화건수 | 영상통화시간 |
1주차 (2020-12-01 ~ 2020-12-04) | 232 | 222시간 05분 |
2주차 (2020-12-07 ~ 2020-12-11) | 321 | 3232시간 23분 |
위와 같은 형태로 목록을 뿌려야 하는데
week_cd 여기에 1주차, 2주차 이렇게는 들어가고 있는데요
지금 일단 계속 저도 쿼리를 짜보고는 있는데 잘 안나와서 질문 드립니다.
기년 년월 별로 1,2,3,4,5주차 로 위와 같은 형태로 쿼리를 사용할 수 있도록
가르침 부탁드립니다.
감사합니다.
평일에만 통화하나요? 주말에는 통화 안하나요?
매일매일 자료가 들어오나요? 빈 날짜가 없다면?
단순하게 MIN(date), MAX(date) 로 뽑으면 될 듯 하구요.
빈 날짜도 있을 수 있다면? 날짜 계산에 의해 뽑으면 되는데.
Postgre 는 날짜함수가 익숙하지 않고, 현재 제가 직접 테스트가 불가해서 정확한 답변이 어렵네요.
오라클 기준으로 우선 답변 드릴께요. 참고 하세요.
SELECT TO_CHAR(date, 'yyyymm') ym , week_cd , week_cd || '주차(' || TO_CHAR(TRUNC(MIN(date), 'd') + 1, 'yyyy-mm-dd') || ' ~ ' || TO_CHAR(TRUNC(MIN(date), 'd') + 5, 'yyyy-mm-dd') || ')' week_nm , SUM(cascnt ) cascnt , SUM(time ) time , SUM(go_cascnt ) go_cascnt , SUM(tlk_cascnt) tlk_cascnt , SUM(video_time) video_time FROM ttt GROUP BY TO_CHAR(date, 'yyyymm'), week_cd ;