带排名和分区的SQL

时间:2012-01-14 09:53:57

标签: java sql oracle

我需要执行这个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数据库中,这有点不起作用,因为没有定义rank和partition。

所以我需要转换这个sql,以便在h2和oracle中工作。

我想用java来执行这个sql。那么有可能将这个sql拆分成不同的sqls而没有rank和partition吗?然后用java处理它?<​​/ p>

1 个答案:

答案 0 :(得分:5)

如果feld1feld0分区中是唯一的,您可以:

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