更容易的方法来选择具有特定列的最大值的行匹配条件

And*_*anu 3 sql oracle max

所以我有一张基本上是树的桌子.每一行在同一个表中有一个父级,一个lvl列告诉我树中的级别,root是lvl = 0.现在说我要选择所有名称以A开头的行,但只有那些这是该组中最高级别的.因此树可能有9个级别,但包含名称以A开头的行的最高级别可能在级别7上,因此我希望级别7上的所有行都以A开头(忽略较低级别的行).我可以这样做:

select id, name, lvl
  from my_table
 where name like 'A%'
   and lvl = (select max(lvl) from my_table
               where name like 'A%')
Run Code Online (Sandbox Code Playgroud)

这个问题是我想要做一些比以A开头的行更复杂的事情,所以条件会有更多的子句,而select和subselect也会有一些连接,我不知道我想重复一遍自己.特别是因为我将来可能需要修改它,我担心我可能会忘记其中一个选项中的某个子句.

因此,有一种更简单的方法,无需重复选择,以获得最大级别.

Vin*_*rat 5

分析可能会帮助您:

SELECT ID, NAME, rn
  FROM (SELECT id, NAME, rank() over(ORDER BY LVL DESC) rn 
          FROM my_table 
         WHERE NAME LIKE 'A%')
 WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)

作为额外的好处,在大多数情况下,自联接的移除将是性能改进.