1. 문제 출처

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

2. 문의 의도

  • 날짜를 기준으로 대여 가능 여부를 확인하는 쿼리
  • case when 으로 비트 마스킹 후 min/max함수를 이용해 이용 가능한 차량 출력하기

3. 풀이

# car_id 기준으로 한번이라도 0이 등장하면 못빌리는 자동차
select car_id, case when possible = 1 then '대여 가능' else '대여중' end as AVAILABILITY
from(
    select car_id, 
        min(possible) as possible
    from 
        (
            select car_id, 
            DATE_FORMAT(start_date,'%Y-%m-%d'), DATE_FORMAT(end_date,'%Y-%m-%d'),
            case when start_date <= '2022-10-16' and end_date >= '2022-10-16' then 0
            else  1 end as possible        # 해당하는 기간에 16일이 껴있으면 0(불가), 1(가능)
            from car_rental_company_rental_history
            order by car_id asc
        ) t1
    group by car_id
    ) t2
order by car_id desc

 

+ Recent posts