날짜 제외가 포함된 Oracle 상위 10개 레코드 선택
이 문서에서는 일반적인 Oracle 데이터베이스 문제를 다룹니다. 즉, 특정 열을 기준으로 정렬된 상위 10개 레코드를 검색하는 동시에 다른 테이블에서 특정 기준과 일치하는 레코드를 제외하는 것입니다. SELECT DISTINCT
및 ORDER BY
절이 있는 간단한 ROWNUM
은 이러한 요소의 상호 작용으로 인해 충분하지 않습니다.
솔루션은 하위 쿼리를 활용하여 원하는 결과를 얻습니다.
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM HISTORY h2 WHERE h2.APP_ID = HISTORY.APP_ID AND TO_CHAR(h2.HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009' ) ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10;</code>
이 접근 방식은 먼저 내부 쿼리 내의 HISTORY
테이블을 필터링합니다. NOT EXISTS
절은 APP_ID
가 '06.02.2009'와 동일한 HISTORY_DATE
레코드와 일치하는 레코드를 효율적으로 제외합니다. 그런 다음 결과는 STORAGE_GB
(내림차순)으로 정렬됩니다. 외부 쿼리는 ROWNUM <= 10
제약 조건을 적용하여 상위 10개 레코드만 반환되도록 합니다. 이 방법은 필터링 및 정렬 이후 행 제한을 올바르게 적용하여 정확한 결과를 보장합니다.
참고: NOT EXISTS
는 일반적으로 이러한 제외 유형에 대해 NOT IN
보다 더 나은 성능을 제공하며, 특히 대규모 데이터 세트의 경우 더욱 그렇습니다. 추가적인 성능 최적화 전략은 Oracle 설명서를 참조하세요.
위 내용은 특정 날짜를 제외하면서 상위 10개 Oracle 레코드를 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!