데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
웹사이트에서 페이징 처리를 할때 top 을 사용하고 있습니다.
SELECT TOP 5 * FROM STORY
WHERE num NOT IN (SELECT TOP " & j & " [num] FROM STORY order by Udate desc ) Order by Udate desc
이런 식으로 top 을 뽑은 다음 페이징 처리 된 부분을 제외를 하고... top 5 이런식으로 뽑아왔었는데요.
목록을 불러오는 부분이 union 으로 여러 테이블의 데이터를 가지고 처리를 하게 되어
위 처럼 사용을 하지 못하게 되었습니다.
Select 문을 top 10 번째 부터 10개를 뽑아오기... 그렇게 할 수는 없을까요?
row_number 로 처리하시면 될듯한데요?
참고만 하세요.
1) 최종 Select 값을 토대로 각 row 별로 row_number 부여
2) 1)의 Select 값을 내부 서브쿼리로 처리하고, Where 조건에서 row_number 값을 토대로 Select
* row_number 컬럼을 rn 이라고 가정
예시)
Select a.*
From (
Select
row_number() over (Order by Udate desc) As rn
,a.*
From
(
원데이터 Select Union 외
) a
) a
Where a.rn Between 11 And 20