[QUIZ 질문] 0 4 541

by 부산광어 [2020.06.11 16:18:02]


참고 : http://gurubee.net/article/45391

[퀴즈] 특정 기간중에 진행중인 행사를 조회하세요.

행사 코드와 행사 진행기간(시작일, 종료일)을 가진 다음과 같은 행사 테이블이 있습니다.
이 테이블을 이용하여 특정 조회 기간중에 진행중인 또는 진행중이었던 행사를 조회하세요.
진행기간이 조회기간에 단 하루라도 포함되는 행사는 조회되어야 합니다.

조회 조건 : '20091115' ~ '20091121'

WITH t AS
(
SELECT '행사1' cd, '20091101' sdt, '20091107' edt FROM dual
UNION ALL SELECT '행사2', '20091109', '20091115' FROM dual
UNION ALL SELECT '행사3', '20091113', '20091117' FROM dual
UNION ALL SELECT '행사4', '20091115', '20091121' FROM dual
UNION ALL SELECT '행사5', '20091117', '20091118' FROM dual
UNION ALL SELECT '행사6', '20091120', '20091123' FROM dual
UNION ALL SELECT '행사7', '20091122', '20091130' FROM dual
UNION ALL SELECT '행사8', '20091101', '20091130' FROM dual
)
SELECT * FROM t
 WHERE (sdt BETWEEN '20091115' AND '20091121')
or (edt BETWEEN '20091115' AND '20091121')
;

제가 짠 쿼리이구,

실제 정답은 

SELECT * FROM t
 WHERE edt >= '20091115'
   AND sdt <= '20091121'
;

입니다. 

성능을 떠나서, 제가 짠 쿼리랑 실제 정답의 결과값이 다르게 나오는데

어떻게 고치면 실제 정답값과 같은 의미로 나타낼 수 있을까요?

by 마농 [2020.06.11 17:53:20]
실제 정답 처럼 고치면 되는 건데요???
기간을 실제로 그려서 비교해 보시면서 이해하셔야 합니다.
검색0      <------->       검색기간
기간1        <--->         1.(O) 검색기간에 포함되는 경우
기간2    <----->           2.(O) 검색시작일에 걸쳐 있는 경우
기간3          <------>    3.(O) 검색종료일에 걸쳐 있는 경우
기간4 <----------------->  4.(O) 검색기간을 포함하는 경우
기간5 <-->                 5.(X) 검색기간 전에 끝나는 경우
기간6                <-->  6.(X) 검색기간 후에 시작하는 경우

작성하신 조건으로는 기간4 가 누락되겠네요.

 


by 부산광어 [2020.06.12 17:29:07]

아.. 이해됐습니다 ..

감사합니다 ㅠㅠ


by 유령회원 [2020.06.12 16:53:57]

4가지 케이스를 그려서 본인쿼리를 검증하면 됩니다.

1. 시작 종료일자가 조회기간을 벗어나는 경우

2. 시작 종료일자가 조회기간내에 있는경유

3. 시작일자가 조회기간을 벗어나고 종료일자가 조회기간내에 있는 경우

4. 종료일자가 조회기간을 벗어나고 시작일자가 조회기간내에 있는 경우


by 부산광어 [2020.06.12 17:29:25]

감사합니다!! 

케이스를 그려서 해봐야겠네요 ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입