2012-01-16 78 views
4

我在我的java應用程序中使用H2數據庫。它似乎不支持rank()row_num()功能,因爲他們仍然在他們的roadmap listH2 database - 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) – 2012-01-16 12:29:22

+1

另請參閱H2論壇:http://groups.google.com/group/h2-database/browse_thread/thread/f063de014c88bda7 – 2012-01-16 12:30:15

回答

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 
[SQL秩和分區(HTTP的