나는 발생한 날짜를 기준으로 가장 최근 이벤트를 얻어야하는 Oracle 쿼리를 작성하고 있습니다.미리 정렬 된 결과가있는 rownum을 사용하고 계급을 사용해야합니까?
필자의 테스트 케이스에서 올바르게 작동하는 것으로 보이는 두 개의 쿼리가 있습니다.
첫 번째
는 날짜 순서로 이벤트를 얻을 수있는 하위 쿼리를 사용하고 난 그냥 ROWNUM을 통해 첫 번째 레코드를 끌어 :SELECT description FROM
(
SELECT description FROM tablename
WHERE ((event_type IN ('A','I','Y')) AND (meeting_date IS NOT NULL)
AND id='whatever')
ORDER BY meeting_date DESC
)
WHERE rownum = 1
두 번째는 동일한 결과를 달성하기 위해 순위를 사용
SELECT description FROM
(
SELECT description, RANK() OVER(ORDER BY meeting_date DESC) mtg_rank
FROM tablename
WHERE ((event_type IN ('A','I','Y')) AND (meeting_date IS NOT NULL)
AND id= 'whatever')
)
WHERE mtg_rank = 1
을
나에게 선향 된 rownum은 충분히 간단하고 나는 그것으로 갈 것이다. 나는 rownum이 일종의 정렬 전에 작동한다는 것을 깨닫습니다. 그래서 나는 subselect에서 먼저 정렬을 수행했습니다.
그러나 내가 그 생각으로 뭔가를 놓치고 있는지 확실하지 않습니다.
이 경우 순위가 권장/우수 사례인지, 아니면 쿼리의 의도를 전달하는 데 더 좋을지 궁금합니다.
두 개의 검색어가 일치하는 경우 (즉, MEETING_DATE의 값이 같은 두 개의 행) 다른 검색어가 표시 될 수 있습니다. 첫 번째 쿼리는 최대 하나의 행을 반환합니다. 두 번째 쿼리는 RANK가 두 행에 대해 동일하므로 관계가있는 경우 둘 이상의 행을 반환 할 수 있습니다. ROW_NUMBER 분석 함수는 ROWNUM에 더 가깝습니다. RANK와 ROWNUM/ROW_NUMBER 중 하나를 선택하는 방법은 관계를 처리하는 방법에 따라 다릅니다. –
OH : 나는 넥타이에 대해 생각하지 않았다 .... :-) – klabranche