-- CAR_RENTAL_COMPANY_CAR: CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS
-- CAR_RENTAL_COMPANY_RENTAL_HISTORY: HISTORY_ID, CAR_ID, START_DATE, END_DATE
-- CAR_RENTAL_COMPANY_DISCOUNT_PLAN: PLAN_ID, CAR_TYPE, DURATION_TYPE, DISCOUNT_RATE
-- CAR_TYPE = 트럭
-- RENTAL_HISTORY에서 HISTORY_ID 별로
-- 금액을 구하여 (DAILY_FEE) * (DURATION) * (DISCOUNT_RATE)
-- 대여 기록 중 트럭의 대여 기간 구하기
WITH TRUCK_CAR_ID AS (
SELECT
CAR_ID, DAILY_FEE
FROM
CAR_RENTAL_COMPANY_CAR
WHERE
CAR_TYPE = '트럭'
),
TRUCK_RENTAL_DURATION AS (
SELECT
T1.HISTORY_ID,
T2.DAILY_FEE,
DATEDIFF(T1.END_DATE, T1.START_DATE) + 1 AS DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY AS T1
JOIN TRUCK_CAR_ID AS T2
ON T1.CAR_ID = T2.CAR_ID
),
TRUCK_DISCOUNT_PLAN AS (
SELECT DURATION_TYPE, DISCOUNT_RATE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE CAR_TYPE = '트럭'
)
SELECT
T1.HISTORY_ID,
-- T1.DURATION, T2.DURATION_TYPE, T2.DISCOUNT_RATE,
ROUND(T1.DAILY_FEE * T1.DURATION * (1 - IFNULL(T2.DISCOUNT_RATE, 0) * 0.01)) AS FEE
FROM TRUCK_RENTAL_DURATION AS T1
LEFT JOIN TRUCK_DISCOUNT_PLAN AS T2
ON
(T1.DURATION >= 90 AND T2.DURATION_TYPE = '90일 이상')
OR (T1.DURATION >= 30 AND T1.DURATION < 90 AND T2.DURATION_TYPE = '30일 이상')
OR (T1.DURATION >= 7 AND T1.DURATION < 30 AND T2.DURATION_TYPE = '7일 이상')
ORDER BY 2 DESC, 1 DESC;