一尘不染

带等级和分区的SQL

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拆分为不同的sql,而不进行排名和分区吗?然后用Java处理呢?


阅读 143

收藏
2021-03-08

共1个答案

一尘不染

如果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
2021-03-08