Greatest-N-per-Group

選擇以從 id 結合最大值獲取值

  • October 31, 2016

我有一張這樣的桌子:

idAction | numberLine | action
  1     |     1      |   1
  1     |     2      |   2
  1     |     3      |   7
  1     |     4      |   6
  2     |     1      |   2
  1     |     2      |   5
  1     |     3      |   3

我需要為 numberLine 為 MAX 的每個 idAction 選擇該行的操作。所以在這個例子中我應該得到兩行:

idAction | numberLine | action
  1     |     4      |   6
  2     |     3      |   3

我試過了Select idAction, MAX(numberLine), action from table Group by idAction。但它說要在組中採取行動,但如果我這樣做,它會讓我得到所有的行。

每組最大 n問題通常用視窗函式解決:

select idAction, numberLine, action
from (
 select idAction, numberLine, action, 
        row_number() over (partition by idaction order by numberline desc) as rn 
 from the_table
) t
where rn = 1;

如果你可以有一個以上的 numberline 最大值,則上面將只返回其中一個。如果您想查看所有這些,請使用dense_rank()而不是row_number()

引用自:https://dba.stackexchange.com/questions/153763