2012-01-16 3 views
4

내 Java 응용 프로그램에서 H2 데이터베이스를 사용하고 있습니다. 그들이 자신의 roadmap listH2 데이터베이스 - Rank() 및 Row_Num()의 대안

에 여전히대로 rank()row_num() 기능을 지원하지 않습니다 여기에 내가 특정 쿼리에 대해

select * from (
    select *, 
      rank() over(partition by MSISDN order by PORT_IN_DATE desc) rank 
    from TEST_PORTIN 
) s 
where rank = 1 
    AND PORT_IN_DATE > '2012-01-16 23:20:27' 
ORDER BY PORT_IN_DATE 
+0

가능한 중복 : //stackoverflow.com/questions/8861457/sql-with-rank-and-partition) –

+1

H2 포럼을 참조하십시오. http://groups.google.com/group/h2-database/browse_thread/thread/f063de014c88bda7 –

답변

1

필요하지 않은 RANK()을 실행하기 위해 노력하고 쿼리가 있다고 보인다. 다음과 같이 당신은 그것을 다시 작성할 수 있습니다 : 조금 애호가 (그러나 반드시 빠른),

SELECT * 
FROM TEST_PORTIN t1 
WHERE PORT_IN_DATE > '2012-01-16 23:20:27' 
AND NOT EXISTS (
    SELECT * 
    FROM TEST_PORTIN t2 
    WHERE t1.MSISDN = t2.MSISDN -- PARTITION BY clause translation 
    AND t1.PORT_IN_DATE > t2.PORT_IN_DATE -- ORDER BY clause translation 
) 
ORDER BY PORT_IN_DATE 

을 아니면 정량 비교 술어를 사용하여,

SELECT * 
FROM TEST_PORTIN t1 
WHERE PORT_IN_DATE > '2012-01-16 23:20:27' 
AND PORT_IN_DATE >= ALL (
    SELECT PORT_IN_DATE 
    FROM TEST_PORTIN t2 
    WHERE t1.MSISDN = t2.MSISDN 
) 
ORDER BY PORT_IN_DATE 
(HTTP [순위 및 파티션 SQL]의