프로그래머스_자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
Level 3치고 은근 조건이 까다롭다
SELECT CAR_ID,
MAX(CASE WHEN '2022-10-16' BETWEEN DATE_FORMAT(START_DATE, '%Y-%m-%d') AND DATE_FORMAT(END_DATE, '%Y-%m-%d')
THEN '대여중'
ELSE '대여 가능'
END) AS 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
CAR_ID별로 여러 기록이 있고, 그 중에서도 가장 나중에 렌탈 기록이 끝난걸 확인해야 한다 -> MAX
2022년 10월 16일에 대여중 -> 날짜 BETWEEN, A AND B일 때 범위는 [A,B] 즉 A와 B를 모두 포함한다
모든 기록이 아닌 CAR_ID별로 기록 -> GROUP BY
SELECT CAR_ID,
(CASE WHEN CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN DATE_FORMAT(START_DATE, '%Y-%m-%d') AND DATE_FORMAT(END_DATE, '%Y-%m-%d'))
THEN '대여중'
ELSE '대여 가능'
END) AS 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
MAX가 아닌 서브쿼리를 활용해서도 풀어보았다
서브쿼리를 쓰는 풀이법은 잘 떠오르질 않는 것 같다..
첫번째 코드에서 case when 구문을 max()함수로 감싸신 이유가 나중에 렌탈 기록이 끝난 것을 보려고 하는 이유는 이해가 되었는데 어떻게 max()로 그것이 가능한건지 궁금합니다!