2016-10-18 5 views
0

최대 절전 모드 버전 : 5.2최대 절전 모드 : 마지막 N 개의 행을 ID의 오름차순으로 선택하는 방법? (단일 쿼리에서)

하위 쿼리를 사용하여 setMaxResults (int)를 사용하려고합니다.

session.createQuery(
"FROM (SELECT * FROM tickets ORDER BY id DESC limit 3) sub ORDER BY id ASC" 
); 

그러나, HQL의 하위 쿼리는 select 절 또는 where 절 내에서만 일어날 수 있으며, 한도는 최대 절전 모드에서 사용할 수 없습니다.

최대 절전 모드에서는 어떻게합니까?


업데이트 -이

명확 예를 들어하려면 = 1 ID = 10 이드 10 개 데이터 항목이있다.

제가 상기 데이터 처리없이 하나만 쿼리 + 를 ID의 오름차순으로 마지막 3 개 데이터를 선택하려는. DB에서

결과는 ID와 ID = 8 것 =

(10) 감사합니다.

+1

[최대 절전 모드 선택 기준이있는 행을 선택하십시오] (http://stackoverflow.com/questions/6887643/hibernate-select-top-and-bottom-nrows-with-criteria) – nbrooks

+0

감사합니다. 당신의 답장을 위해서. 그 게시물은 마지막 행 n 행을 얻지 만 ID의 오름차순이 아닙니다. 그리고 나는 두 개의 쿼리를 원하지 않고 혼합합니다. 하나의 쿼리에서 데이터를 처리하지 않고 db에서 데이터를 가져 오려고합니다. – Pika

답변

0

id가 1에서 10이고 마지막으로 N=3이 필요하다고 가정합니다.

10에서 1하기 위해 ID를 반환
SELECT * FROM tickets ORDER BY id DESC 

당신의 접근 방식

을 촬영. 마지막으로 N=3을 오름차순으로 가져 오려고합니다. 즉, ID를 3에서 1까지 오름차순으로 입력해야합니다.

첫 번째 N ID를 오름차순으로 선택하면 어떤 문제가 발생합니까?

session.createQuery(
    "FROM tickets ORDER BY id ASC" 
).setMaxResults(n); 
+0

답장을 보내 주셔서 감사합니다. 이것은 내가 의미하는 것이 아닙니다. 질문을 명확히하기 위해 업데이트했습니다. – Pika

0

당신은 그것을 구현하는 Query setFirstResult(int startPosition), Query setMaxResults(int maxResult)를 사용할 수 있습니다. 일반적으로 페이지 매김에 사용됩니다.

편의적으로 여기에서 내림차순으로 첫 번째 3 레코드를 얻을 수 있으므로 Query setMaxResults(int maxResult) 만 사용할 수 있습니다.

+0

나는 상수 데이터베이스에서만 작동한다고 생각한다. 예 : QUERY.setFirstResult (6) .setMaxResults (3). 내가 틀렸어? 동적 데이터베이스의 경우 여분의 쿼리없이 int startPosition을 얻을 수 있습니까? – Pika