2012-01-14 75 views
3

我需要執行這個SQL:SQL秩和分區

select * from 
(select nt.*, 
     rank() over (partition by feld0 order by feld1 desc) as ranking 
from (select bla from test) nt) 
where ranking < 3 
order by 1,2 

這個SQL在我的oracle數據庫,但我有時會使用這個行不通的,因爲排名和分區沒有定義的H2數據庫工作正常。

所以我需要轉換這個SQL,以便它在h2和oracle中工作。

我想用java來執行這個sql。那麼是否有可能將這個sql分成不同的sqls而沒有等級和分區?然後用java處理它?

+1

H2不支持窗口函數,你不能把這一查詢H2。 – 2012-01-14 10:21:14

回答

5

如果feld1是內feld0分區唯一的,你可以:

select * 
,  (
     select count(*) 
     from YourTable yt2 
     where yt2.feld0 = yt1.feld0 -- Same partition 
       and yt2.feld1 <= yt1.feld1 -- Lower or equal rank 
     ) as ranking 
from YourTable yt1 
+0

有趣,這工作!但是多於一個'order by'呢? – 2015-04-25 09:57:55