본문 바로가기

Skills/SQL

이번 달과 지난 달에 속한 쿠폰 슬롯 수 분석하기

반응형

이번 달과 지난달에 속한 쿠폰 슬롯 개수를 구하는 SQL 쿼리에 대해 알아보겠습니다. 

 

먼저 쿠폰 테이블 샘플 데이터셋을 만들어 보겠습니다.

CREATE TABLE coupon_table (
    coupon_id INT,
    start_date DATE,
    end_date DATE
);
INSERT INTO coupon_table (coupon_id, start_date, end_date)
VALUES (1, '2023-01-01', '2023-01-31'),
       (2, '2023-01-15', '2023-02-14'),
       (3, '2023-02-01', '2023-02-28'),
       (4, '2023-02-15', '2023-03-16'),
       (5, '2023-03-01', '2023-03-31'),
       (6, '2023-01-10', '2023-01-25'),
       (7, '2023-02-05', '2023-02-20'),
       (8, '2023-02-12', '2023-03-12'),
       (9, '2023-01-20', '2023-02-19'),
       (10, '2023-02-28', '2023-03-29');

 

coupon_table 데이터

  • coupon_id: 쿠폰의 고유 식별자입니다.
  • start_date: 쿠폰이 사용 가능한 시작 날짜를 나타냅니다.
  • end_date: 쿠폰이 사용 가능한 마지막 날짜를 나타냅니다.

 

다음과 같은 쿼리를 사용하여 이번달과 지난달에 속한 쿠폰 슬롯 개수를 구합니다.

current_date은 2023-03-28입니다. 추후에 쿼리를 current_date 대신에 date('2023-03-28')로 작동시키면 됩니다.

SELECT
    count(distinct case when start_date <= current_date - interval '1 day' and end_date >= date_trunc('month', current_date) then coupon_id end) as mtd_coupon_slot_cnt,
    count(distinct case when start_date <= date_trunc('month', current_date) - interval '1 day' and end_date >= date_trunc('month', current_date) - interval '1 month' then coupon_id else 0 end) as m_1_coupon_slot_cnt
from 
    coupon_table;

첫 번째 줄에서는 이번달  쿠폰 슬롯 개수를 구하기 위한 조건을 정의합니다. 

  • start_date가 현재 날짜의 하루 전보다 작거나 같고, end_date가 현재 월의 시작일보다 크거나 같은 경우

 

두 번째 줄에서는 지난달 쿠폰 슬롯 개수를 구하기 위한 조건을 정의합니다.

  • start_date가 지난달의 마지막 말일보다 작거나 같고, end_date가 지난달의 시작일 보다 크거나 같은 경우

 

실행 결과는 아래와 같습니다. 이번달에 4개, 지난달에 8개가 속해 있는 걸 확인할 수 있습니다.

쿼리 실행 결과

이를 통해 이번달과 지난달에 속한 쿠폰 슬롯 개수를 간단하게 확인할 수 있습니다.

반응형