본문 바로가기

DB/Programmers SQL Kit

자동차 대여 기록에서 장기/단기 대여 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/151138

- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여기록을 조회한다.

단, 대여 시작일이 22년 9월에 속하는 대여기록이어야하며, 대여기간이 30일 이상이면 장기 대여, 아니면 단기 대여로 표시하는 컬럼을 추가해서 조회한다. 또한 기록 ID 기준 내림차 정렬한다.

1. 대여 시작일이 2022년 9월이 데이터를 조회한다.

2. DATEDIFF, 등을 사용해서 두 날짜 차이를 계산한다.

3. CASE를 사용해 날짜 차이 + 1가 >= 30 이면 장기 대여 아니면 단기 대여인  컬럼을 추가한다. (+1 인 이유는 대여 시작일을 포함해야한다.)

- SQL

mysql : SELECT history_id, car_id, DATE_FORMAT(start_date, '%Y-%m-%d') START_DATE,
    DATE_FORMAT(end_date, '%Y-%m-%d') END_DATE,
    CASE
        WHEN (ABS(DATEDIFF(end_date, start_date)) + 1 >= 30) THEN '장기 대여'
        ELSE '단기 대여'
    END RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(start_date, '%Y-%m') = '2022-09'
ORDER BY history_id DESC;

oracle : SELECT history_id, car_id, TO_CHAR(start_date, 'yyyy-mm-dd') START_DATE,
    TO_CHAR(end_date, 'yyyy-mm-dd') END_DATE,
    CASE
        WHEN (end_date - start_date + 1 >= 30) THEN '장기 대여'
        ELSE '단기 대여'
    END RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(start_date, 'yyyy-mm') = '2022-09'
ORDER BY history_id DESC;