[SQL] 이 쿼리 페이징 (/ 건너 뛰기 걸릴) 기능을 구현
SQL이 쿼리 페이징 (/ 건너 뛰기 걸릴) 기능을 구현
나는이 같은 예를 읽는 기사를, SQL에서 사용자 정의 페이징을 구현하는 방법에 대해 조금 이해하려고 노력하고있다.
나는 완벽하게 작동 다음 쿼리를 보유하고 있습니다. 그러나 나는이 하나 페이징을 구현하고 싶습니다.
SELECT TOP x PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate
from dbForumEntry
group by PostId ) SubQueryAlias
order by LastDate desc
그것은 내가 원하는 무엇입니까
나는 관련 항목이 포럼 게시물을 보유하고 있습니다. 나는 최근에 논란이 게시물을 선택할 수 있도록, 최신 추가 항목이 게시물을 싶어.
지금, 나는 대신에 "10"의에서 "10 20 최근에 활성화 된 게시물"을 얻을 수 있어야합니다.
나는 무엇 시도
나는 그러나 정말 행운과, 기사의 것과 ROW 기능을 구현하기 위해 노력했다.
모든 아이디어를 어떻게 그것을 구현하는 방법?
해결법
-
==============================
1.SQL 서버 2012 년은 매우 쉽게 매우이다
SQL 서버 2012 년은 매우 쉽게 매우이다
SELECT col1, col2, ... FROM ... WHERE ... ORDER BY -- this is a MUST there must be ORDER BY statement -- the paging comes here OFFSET 10 ROWS -- skip 10 rows FETCH NEXT 10 ROWS ONLY; -- take 10 rows
우리는 우리가 사용할 수 BY ORDER를 건너 뛰려면
SELECT col1, col2, ... ... ORDER BY CURRENT_TIMESTAMP OFFSET 10 ROWS -- skip 10 rows FETCH NEXT 10 ROWS ONLY; -- take 10 rows
(- NHibernate에 의해, 예를 들어 있지만 사용되는 현명하게 집어 열을 사용하려면 ORDER BY가 선호하는 방법이기 때문에 차라리 해킹으로 그 표시 것입니다.)
질문에 대답합니다 :
--SQL SERVER 2012 SELECT PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate from dbForumEntry group by PostId ) SubQueryAlias order by LastDate desc OFFSET 10 ROWS -- skip 10 rows FETCH NEXT 10 ROWS ONLY; -- take 10 rows
새로운 키 워드 오프셋 도입 된 다음 (바로 다음 SQL 표준)를 가져옵니다.
그러나 나는 당신이 바로 2012 SQL 서버를 사용하지 않는 것으로 추측? 이전 버전에서는 조금 (조금) 어렵다. 여기에 모든 SQL 서버 버전에 대한 비교 및 예는 다음과 같습니다 여기
그래서,이 SQL 서버 2008에서 일할 수 :
-- SQL SERVER 2008 DECLARE @Start INT DECLARE @End INT SELECT @Start = 10,@End = 20; ;WITH PostCTE AS ( SELECT PostId, MAX (Datemade) as LastDate ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber from dbForumEntry group by PostId ) SELECT PostId, LastDate FROM PostCTE WHERE RowNumber > @Start AND RowNumber <= @End ORDER BY PostId
-
==============================
2.당신은 당신이 원하는 행을 지정할 수 있도록 SQL 서버에서이 작업을 수행하기 위해, 당신은 열을 기준으로 쿼리를 주문해야합니다.
당신은 당신이 원하는 행을 지정할 수 있도록 SQL 서버에서이 작업을 수행하기 위해, 당신은 열을 기준으로 쿼리를 주문해야합니다.
예:
select * from table order by [some_column] offset 10 rows FETCH NEXT 10 rows only
이 작업을 수행 할 때 그리고 당신은 "TOP"키워드를 사용할 수 없습니다.
당신은 자세한 내용은 여기를 배울 수 있습니다 : https://technet.microsoft.com/pt-br/library/gg699618%28v=sql.110%29.aspx
-
==============================
3.SQL 2008
SQL 2008
Radim 쾰러의 대답은 작동하지만, 여기에 짧은 버전입니다 :
select top 20 * from ( select *, ROW_NUMBER() OVER (ORDER BY columnid) AS ROW_NUM from tablename ) x where ROW_NUM>10
출처 : https://forums.asp.net/post/4033909.aspx
-
==============================
4.
OFFSET 10 ROWS -- skip 10 rows FETCH NEXT 10 ROWS ONLY; -- take 10 rows
당신의 선택 구문의 끝에서 이것을 사용합니다. =)
-
==============================
5.당신은 다음과 같은 페이지 매김을위한 중첩 된 쿼리를 사용할 수 있습니다 : 4 행의 기본 키는 고객 ID는 8 행 페이징
당신은 다음과 같은 페이지 매김을위한 중첩 된 쿼리를 사용할 수 있습니다 : 4 행의 기본 키는 고객 ID는 8 행 페이징
고객의 선택 상위 5 * WHERE 고객 FROM (SELECT 상위 3의 CustomerID의 나라 = '독일과 고객 ID 없음 도시 별 WHERE 국가 = '독일'순서) 시에서 주문;
from https://stackoverflow.com/questions/13220743/implement-paging-skip-take-functionality-with-this-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 동적으로 열 SQL을 생성 (0) | 2020.04.06 |
---|---|
[SQL] SQLite는 - 어떻게 다른 데이터베이스에서 테이블을 조인합니까? (0) | 2020.04.06 |
[SQL] SQL 서버의 이중 어떤 표현? (0) | 2020.04.06 |
[SQL] SQL 열에서 가장 자주 값을 찾기 (0) | 2020.04.06 |
[SQL] SQL 서버 : 추출 테이블 메타 데이터 (설명, 필드 및 데이터 유형) (0) | 2020.04.06 |