2012-01-16 11 views
4

私はJavaアプリケーションでH2データベースを使用しています。それは彼らが彼らのroadmap listH2データベース - Rank()およびRow_Num()の代替

に残っているとして、それはrank()row_num()機能をサポートしていないようだここで私はあなたの特定のクエリに対するRANK()を必要としない

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

を実行しようとしているクエリがあります。次のようにあなたがそれを書き換えることができますビット手の込んだ(必ずしも必要ではないが速い)、

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]の
関連する問題