【问题标题】:SQL with rank and partition具有等级和分区的 SQL
【发布时间】:2012-01-14 09:53:56
【问题描述】:

我需要执行这个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拆分成没有rank和partition的不同sql呢?然后用java来处理?

【问题讨论】:

  • H2 不支持窗口函数,您无法将该查询转换为 H2。

标签: java sql oracle


【解决方案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

【讨论】:

  • 有趣,这行得通!但是对于多个order by 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2018-11-30
  • 2015-04-01
相关资源
最近更新 更多