객실마다 가장 늦은 예약일의 금액을 모든 행에 붙여 다음 [결과]를 얻… | [SQLD] SQL 개발자 기출유형 모의고사 2회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 2회
객실마다 가장 늦은 예약일의 금액을 모든 행에 붙여 다음 [결과]를 얻으려 한다. ( ㉠ )에 들어갈 식으로 옳은 것은?[예약]
| 예약번호 | 객실 | 예약일 | 금액 |
|---|---|---|---|
| 1 | R1 | 2026-05-01 | 120 |
| 2 | R1 | 2026-05-03 | 150 |
| 3 | R1 | 2026-05-07 | 130 |
| 4 | R2 | 2026-05-02 | 200 |
| 5 | R2 | 2026-05-06 | 180 |
SELECT 예약번호, 객실, 금액, ( ㉠ ) AS 마지막금액 FROM 예약 ORDER BY 예약번호;
[결과]
| 예약번호 | 객실 | 금액 | 마지막금액 |
|---|---|---|---|
| 1 | R1 | 120 | 130 |
| 2 | R1 | 150 | 130 |
| 3 | R1 | 130 | 130 |
| 4 | R2 | 200 | 180 |
| 5 | R2 | 180 | 180 |
[후보]
(가) LEAD(금액) OVER (PARTITION BY 객실 ORDER BY 예약일)
(나) LAST_VALUE(금액) OVER (PARTITION BY 객실 ORDER BY 예약일)
(다) LAST_VALUE(금액) OVER (PARTITION BY 객실 ORDER BY 예약일
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)
(라) FIRST_VALUE(금액) OVER (PARTITION BY 객실 ORDER BY 예약일 DESC)1
(다)
2
(가)
3
(나)
4
(라)
해설
예약일 내림차순 파티션의 첫 값이 곧 가장 늦은 예약 금액이므로 FIRST_VALUE … ORDER BY 예약일 DESC가 R1 모든 행에 130, R2 모든 행에 180을 붙인다.
ORDER BY만 둔 윈도우의 기본 프레임은 현재 행까지라서 LAST_VALUE를 그대로 쓰면 자기 금액이 나온다.
- LEAD는 다음 예약 금액을 돌려주고 마지막 행은 NULL이다.
- 기본 프레임의 LAST_VALUE는 현재 행 금액과 같다.
- 1 FOLLOWING까지인 프레임은 다음 행 금액이라 예약번호 1·4가 150·180이 된다.
오류나 개정된 내용이 보이면 알려주세요