代码之家  ›  专栏  ›  技术社区  ›  Andrei Fierbinteanu

为某列选择具有最大值的行匹配条件的简单方法

  •  3
  • Andrei Fierbinteanu  · 技术社区  · 15 年前

    所以我有一张桌子,基本上是一棵树。每一行在同一个表中都有一个父级,还有一个LVL列告诉我树中的级别,根为LVL=0。现在假设我要选择名称以开头的所有行,但只选择该组中级别最高的行。因此树可能有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%')
    

    这个问题是,我想做一些比从A开始的行更复杂的事情,所以条件是有更多的子句,select和subselect也有一些连接,我不想重复我自己。尤其是因为我以后可能需要修改这个,而且我担心我可能会忘记其中一个选择中的某个子句。

    因此,有没有一种更简单的方法可以做到这一点,而不必重复选择,以获得最大级别。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Andrei Fierbinteanu    15 年前

    Analytics

    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