postgresql 문의 드립니다. 0 3 345

by 노크노크 [2021.11.23 15:01:41]


주문번호 날짜 구매항목 고객번호
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문을 짜야할 지 모르겠습니다.ㅠ

고수님들의 많은 도움 부탁 드립니다!

by 마농 [2021.11.23 16:35:19]
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')
;

 


by 노크노크 [2021.11.24 13:47:18]

답변 감사합니다.

답변주신 내용대로 실행하면 문의드린 내용에서 2번째 테이블처럼은 안 나오네요.


by 마농 [2021.11.24 14:56:52]

특정 조회일자에 따른 직전 3개월 집계 결과를 보여주는 방식으로 작성했는데.
원하는 결과와 다른 부분이 어떤 부분일까요?

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