주문번호 | 날짜 | 구매항목 | 고객번호 |
ORD0001 | 2021-01-01 | 감자칩 | C1234 |
ORD0002 | 2021-01-01 | 고구마칩 | C2345 |
ORD0003 | 2021-01-01 | 감자칩 | C3456 |
ORD0004 | 2021-01-01 | 단호박칩 | C4567 |
ORD0005 | 2021-01-02 | 사과칩 | C5678 |
ORD0006 | 2021-01-02 | 말린망고 | C6789 |
ORD0007 | 2021-01-02 | 감자칩 | C7890 |
ORD0008 | 2021-01-02 | 단호박칩 | C8901 |
: | |||
ORD1788 | 2021-06-30 | 말린망고 | C3456 |
ORD1789 | 2021-06-30 | 감자칩 | C4567 |
ORD1790 | 2021-06-30 | 수박주스 | C5678 |
ORD1791 | 2021-06-30 | 건강마즙 | C8901 |
위 테이블과 같이 주문내역 데이터 셋이 있는 데, 조회년월 기준 직전 3개월의 마감 실적을 조회할 수 있는 데이터셋을 만들고 싶습니다.
조회일자 | 마감일자 | 주문건수 | 고객수 |
2021-04-30 | 2021-01-31 | 298 | 75 |
2021-04-30 | 2021-02-28 | 298 | 78 |
2021-04-30 | 2021-03-31 | 298 | 79 |
2021-05-31 | 2021-02-28 | 298 | 78 |
2021-05-31 | 2021-03-31 | 298 | 79 |
2021-05-31 | 2021-04-30 | 298 | 77 |
2021-06-30 | 2021-03-31 | 298 | 79 |
2021-06-30 | 2021-04-30 | 298 | 77 |
2021-06-30 | 2021-05-31 | 299 | 76 |
2021-07-31 | 2021-04-30 | 298 | 77 |
2021-07-31 | 2021-05-31 | 299 | 76 |
2021-07-31 | 2021-06-30 | 300 | 78 |
찾아보니 http://www.gisdeveloper.co.kr/?p=4621 << 이 문서처럼 단일한 계산 값을 리턴하는 설명이 대부분이라 어떤 순서나 구조로 SQL문을 짜야할 지 모르겠습니다.ㅠ
고수님들의 많은 도움 부탁 드립니다!
WITH t AS ( SELECT DATE '2021-01-01' dt, 'C1234' cno UNION ALL SELECT '2021-01-01', 'C1234' UNION ALL SELECT '2021-01-01', 'C3456' UNION ALL SELECT '2021-01-01', 'C4567' UNION ALL SELECT '2021-01-02', 'C5678' UNION ALL SELECT '2021-01-02', 'C6789' UNION ALL SELECT '2021-02-02', 'C7890' UNION ALL SELECT '2021-02-02', 'C8901' UNION ALL SELECT '2021-03-30', 'C3456' UNION ALL SELECT '2021-03-30', 'C3456' UNION ALL SELECT '2021-03-30', 'C3456' UNION ALL SELECT '2021-04-30', 'C3456' ) SELECT TO_CHAR(dt, 'yyyy-mm') ym , COUNT(*) cnt_ord , COUNT(DISTINCT cno) cnt_cno FROM t WHERE dt >= DATE_TRUNC('month', DATE '2021-04-15') - INTERVAL '3 MONTHS' AND dt < DATE_TRUNC('month', DATE '2021-04-15') GROUP BY TO_CHAR(dt, 'yyyy-mm') ;