CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.



RENTAL 시작일자와 종료일자가 있는 RENTAL 테이블이 있고,
2022년 11월 1일부터 2022년 11월 30일까지 대여 가능한 데이터를 구하고자 한다.
START <= 20221130 and END >= 20221101
11월에 대여가 불가능한 데이터가 모두 뽑힌다!!!!
select c.car_id, c.car_type, floor((c.daily_fee*((100-d.DISCOUNT_RATE)/100))*30) as fee
from (
SELECT a.car_id, a.car_type, a.daily_fee
from CAR_RENTAL_COMPANY_CAR a
where a.car_id not in (
select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where to_char(START_DATE, 'YYYYMM') = '202211' or to_char(END_DATE, 'YYYYMM') = '202211'
)
and a.CAR_TYPE in ('세단','SUV')
) c
,CAR_RENTAL_COMPANY_DISCOUNT_PLAN d
where c.CAR_TYPE = d.CAR_TYPE
and d.DURATION_TYPE LIKE '30%'
and floor((c.daily_fee*((100-d.DISCOUNT_RATE)/100))*30) BETWEEN 500000 and 2000000
order by 3 desc, 2, 1 desc
-> 반례를 찾았다.
where to_char(START_DATE, 'YYYYMM') = '202211' or to_char(END_DATE, 'YYYYMM') = '202211'
이부분에서 Start date 가 10월1일 ~ end date 가 12월 2일 이면 제외되지 않는다..!
select c.car_id, c.car_type, (c.daily_fee*((100-d.DISCOUNT_RATE)/100))*30 as fee
from (
SELECT a.car_id, a.car_type, a.daily_fee
from CAR_RENTAL_COMPANY_CAR a
where a.car_id not in (
select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where to_char(START_DATE, 'YYYYMMDD') <= '20221130' and to_char(END_DATE, 'YYYYMMDD') >= '20221101'
)
and a.CAR_TYPE in ('세단','SUV')
) c
,CAR_RENTAL_COMPANY_DISCOUNT_PLAN d
where c.CAR_TYPE = d.CAR_TYPE
and d.DURATION_TYPE LIKE '30%'
and (c.daily_fee*((100-d.DISCOUNT_RATE)/100))*30 BETWEEN 500000 and 2000000
order by 3 desc, 2, 1 desc
날짜 기간 비교하는 알고리즘 바꾸고 정답!